Firestore:获取按两个子级别文档中包含的数字字段排序的文档

时间:2019-01-25 20:43:54

标签: firebase nosql google-cloud-firestore

我的公司要求我从根集合users中获取所有文档。必须根据第一子级别文档和第二子级别文档中存在的标题为amount的数字字段的值对它们进行排序。

我不知道如何使用Firestore NoSQL查询轻松实现此目标。您会向我推荐什么?

数据结构

这里是:

  • 用户
    • user_1(要获取和排序的文档)
    • user_2(要获取和排序的文档)

这两个用户的结构如下:

  • 收藏_1
    • document_of_first_level
      • 包含以下字段:amount
      • ,还包含以下集合:collection_2
        • document_of_second_level
          • 包含以下字段:amount

所以我应该得到一个包含user_1user_2的列表。这是一个排序列表。它根据两个名为amount的字段(分别包含在user_1下和user_2下)进行排序。这两个字段都是嵌套的。

1 个答案:

答案 0 :(得分:1)

  

必须根据第一个子级别文档中以及第二个子级别文档中存在的数字字段(标题为金额)的值对它们进行排序。

正如@DougStevenson在其评论中提到的那样,您无法使用Cloud Firestore实现这一目标。在单个查询中无法从子集合(级别1)和另一个子集合(级别2)获取文档。 Firestore不一次性支持跨不同子集合的查询。 Firestore中的查询很浅,这意味着它们仅从查询所针对的集合中获取项目。单个查询只能使用单个集合中的文档属性。

因此,我能想到的最简单的解决方案是两次查询数据库,一次是在子集合中获取文档(级别1),第二次在子集合中获取文档(级别2),然后在客户端进行比较。

您的意见中的想法是一种解决方案,因为在1级文档下添加属性将使您仅查询数据库一次。在Firestore中,您可以在单个查询中简单地链接多个where()函数。