【问题标题】:How to get all documents of a collection of all documents of a collection? [duplicate]如何获取集合的所有文档的集合的所有文档? [复制]
【发布时间】:2021-03-30 04:59:26
【问题描述】:

我正在尝试遍历我的用户集合中的所有用户(文档),然后访问每个用户中的集合,我将在其中检查字段是否设置为 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()

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

【问题讨论】:

  • 不支持此类查询。如果您需要一个查询中的所有内容,则应该考虑重组数据。为了满足多种类型的查询,复制数据是很常见的。

标签: javascript firebase google-cloud-firestore


【解决方案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()

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2020-08-09
    • 2020-01-22
    • 2022-01-18
    相关资源
    最近更新 更多