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 的子集合的所有文档?的主要内容,如果未能解决你的问题,请参考以下文章