Cloud Firestore 如何查找包含特定文档 ID 的子集合的所有文档?

Posted

技术标签:

【中文标题】Cloud Firestore 如何查找包含特定文档 ID 的子集合的所有文档?【英文标题】:Cloud Firestore how to find all documents with subcollection containing specific document ID? 【发布时间】:2019-09-26 21:02:06 【问题描述】:

我正在尝试实现一种方法来保持 Firestore 中的一致性,但我需要一种方法来找到存在重复数据的所有位置。 Firestore 中是否有办法查找其子集合包含具有特定文档 ID 的文档的所有文档?例如对于如下结构

Users(collections)
    1234(document)
        Name: 
        Friends(collection)
            5678(document) 
                Name: 
            
            9012(document) 
                Name:
            
    
    5678(document)
        Name:
    

我将使用什么查询来查找其好友列表包含文档 ID 为 5678 的文档的所有用户 ID?例如,当用户 5678 决定更改他/她的姓名时?

【问题讨论】:

【参考方案1】:

不完全是。早在 5 月就引入了集合组查询,它允许您搜索具有相同名称的所有集合,但该限制不适用于您的用例,因为您的用户存储在 Users 中,而他们的朋友存储在 Friends 中.

如果好友被重命名以匹配用户并且id 也存储在文档中,则可以使用这种类型的查询:

let friends = db.collectionGroup('users').where('id', '==', id);
friends.get().then(function(querySnapshot) 
  querySnapshot.forEach(function(doc) 
    console.log(doc.id, ' => ', doc.data());
  );
);

https://firebase.google.com/docs/firestore/query-data/queries#collection-group-query

【讨论】:

以上是关于Cloud Firestore 如何查找包含特定文档 ID 的子集合的所有文档?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Swift中的Cloud FireStore Firebase访问特定字段

如何使用颤振和飞镖从 Cloud Firestore 检索特定数据?

如何使用 SwiftUI 中的 documentID 删除特定的 Cloud Firestore 文档?

在具有ID的Firestore中查找特定字段

如何从 Cloud Firestore 数据库中获取 node.js 中的特定字段值?

如何在 Cloud Firestore 中使用文档 ID 执行集合组查询