如何获取集合的所有文档的集合的所有文档?

时间:2020-12-20 00:00:39

标签: javascript firebase google-cloud-firestore

我正在尝试遍历我的用户集合中的所有用户(文档),然后访问每个用户中的一个集合,我将在其中检查某个字段是否设置为 true。

我可以按如下方式遍历我的用户:

  let users = await firebase
    .firestore()
    .collection("users")
    .get()

  return users.docs.map(item => item.data())

但我无法进一步访问并访问每个用户文档中的集合。

我在网上看到的所有访问子集合的示例都明确涉及这样做,即

let snapshot = await firebase
    .firestore()
    .collection('users')
    .doc('exampleUID')
    .collection('subcollection')
    .get()

但我没有看到有关获取集合中所有文档的集合的指导示例。

1 个答案:

答案 0 :(得分:1)

没有单一的机制可以同时获取一个文档,以及所有“子”集合中的所有“子”文档,但是您可以获取所有文档在子集合中。

它被称为“collectionGroups”。您在名为 subcollection 的 CollectionGroup 上创建查询。效果很好。

firebase.firestore().collectionGroup(tableName).get()

但是,警告 - 它将所有名为 subcollection 的集合和子集合一起处理,而不管级别如何,因此您必须考虑如何命名子集合。 例如,如果您尝试了 .collectionGroup("thatGroup") 并且您的数据库中有以下结构:

/topCollection1/{documents}/subcollection1/{documents}/thatGroup/{documents}
/topCollection2/{documents}/thatGroup/{documents}

您最终会得到 topCollection1 topCollection2 的后代文档。

虽然结果显示在单个 QuerySnapshot 中,但您可以使用 .ref.path (字符串)并解析它,或重复使用 .parent()