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

Firebase Firestore:获取按两个子级别文档中包含的数字字段排序的文档,firebase,nosql,google-cloud-firestore,Firebase,Nosql,Google Cloud Firestore,我的公司要求我从根集合,users获取所有文档。必须根据标题为“金额”的数字字段的值对它们进行排序,该字段出现在第一个子级别文档以及第二个子级别文档中 我不知道如何通过Firestore NoSQL查询轻松实现这一目标。你给我推荐什么 数据结构 这是: 使用者 用户_1(要获取和排序的文档) 用户_2(要获取和排序的文档) 这两个用户的结构如下: 收藏1 第一级文件 包含此字段:金额 并且还包含此集合:集合2 第二级文档 包含此字段:金额 所以我应该得到一个包含us

我的公司要求我从根集合,
users
获取所有文档。必须根据标题为“金额”的数字字段的值对它们进行排序,该字段出现在第一个子级别文档以及第二个子级别文档中

我不知道如何通过Firestore NoSQL查询轻松实现这一目标。你给我推荐什么

数据结构 这是:

  • 使用者
    • 用户_1(要获取和排序的文档)
    • 用户_2(要获取和排序的文档)
这两个用户的结构如下:

  • 收藏1
    • 第一级文件
      • 包含此字段:
        金额
      • 并且还包含此集合:集合2
        • 第二级文档
          • 包含此字段:
            金额

所以我应该得到一个包含
user\u 1
user\u 2
的列表。这是一个排序列表。它是根据两个字段排序的,这两个字段都命名为
amount
,它们包含在
user\u 1
下,也包含在
user\u 2
下。这两个字段都是嵌套的

必须根据标题为“金额”的数字字段的值对它们进行排序,该字段出现在第一个子级别文档以及第二个子级别文档中

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

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


您的评论中的想法是一个解决方案,因为在level 1文档下添加属性将允许您只查询一次数据库。在Firestore中,您可以简单地在一个查询中链接多个
where()
函数。

在一个查询中无法做到这一点。您可能需要阅读子集合中的每一个文档,并检查客户端中的匹配项。我更愿意在用户文档中创建一个新字段,包含总金额。然后我将根据这个新字段的值对它们进行排序。顺便说一句,每次用户购买物品时,此字段都会更新。@DougStevenson您对此有何看法?您需要做什么来完成查询。嗯,最后我将编写几个查询进行排序,正如您第一次向我推荐的那样。我不会使用我在第二篇文章中提到的计数器,因为我会使用事务,如果客户离线,事务就会失败。我的申请一定不是这样的,因为涉及到钱。