【问题标题】:How to get only one document per subcollection in collection group query?如何在集合组查询中每个子集合只获取一个文档?
【发布时间】:2020-12-08 15:30:33
【问题描述】:

我有这个 Firestore 数据架构:

rootCol/{rootDoc}/subCol1/{doc1Type}
rootCol/{rootDoc}/subCol2/{doc2Type}

我想获取subCol1 中的所有文档,其中rootDoc 包含具有特定字段的doc2Type

我知道我可以使用简单的.where 调用来获取所有doc2Type where exampleField == ‘exampleString’,然后获取查找SubCol1 的路径。

但问题是subCol2 可以包含许多doc2TypeexampleField。这意味着我的查询将返回许多 doc2Type,然后导致我对 subCol1/{doc1Type} 的查询被多次调用。

如何从exampleField == ‘exampleString’ 的每个subCol2 子集合中仅获取1 个文档?

【问题讨论】:

    标签: node.js firebase google-cloud-firestore nosql firebase-admin


    【解决方案1】:

    这对于集合组查询是不可能的。这些查询平等地考虑所有子集合中的所有文档。它不能按子集合“分组”文档,也不能让您应用每个子集合的过滤器。

    您将不得不重组数据以更好地支持您正在尝试执行的操作,或者编写客户端代码过滤集合组查询的结果,以通过使用每个文档的引用来查找每个子集合中的单个文档将结果限制在您的要求范围内。

    【讨论】:

    • 感谢您的回复!如果两个文档都有非常相似的数据,我如何过滤集合组查询的结果?
    • 这完全由您决定。我看不到你的数据,也不知道你想要哪些文件。
    • 谢谢!其实我想我有解决办法。同一子集合中的不同文档中存在一个字段不同。所以也许我可以使用 2 个.where 过滤器进行子集合组查询?
    • 再说一次,我看不到您的数据,所以我无法提出任何建议。如果您有新问题,请将其与未按预期方式工作的代码和数据分开发布。
    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 2021-10-30
    • 2021-12-13
    • 1970-01-01
    • 2020-08-15
    • 2021-01-23
    • 2016-11-26
    • 2021-08-06
    相关资源
    最近更新 更多