首页 > 解决方案 > Android Firebase Firestore SDK:如何根据另一个集合的文档字段从集合中排序文档?

问题描述

我的想法是为帖子创建一个喜欢和不喜欢的系统(用户可以喜欢和不喜欢帖子)并在片段中显示用户列表,按以下方式排序:顶级用户是最多喜欢的用户。

在我的 Firebase Firestore 数据库中:

目前,我使用“B”对上面描述的用户列表中的用户进行排序。我这样使用“B” return FirebaseFirestore.getInstance().collection("users").orderBy("likes", Query.Direction.DESCENDING);:.

但是,由于与 Firebase 安全规则相关的一些技术事实,并且为了简化数据库结构,我只想使用“A”,并删除“B”。更准确地说,我想获得所有用户,并根据“A”对他们进行排序。但是,计数器“A”是在帖子集合的文档中定义的,而计数器“B”是在用户集合的文档中定义的:这样更容易使用。

所以我的问题是:对于每个用户,我必须得到他们所有的帖子,然后总结他们的计数器“A”,然后得到所有用户,然后根据这个总和对他们进行排序。但是,我想知道:是否可以使用 Firebase Firestore Android API 来做到这一点?(类似于之前给出的指令)换句话说:如何根据另一个集合的文档字段从集合中排序文档?但请注意,实际上它更难,因为我必须总结用户创建的每个帖子的计数器“A”。

标签: androidfirebasegoogle-cloud-firestore

解决方案


您尝试做的本质上是“加入”类型的操作,Firestore 不支持该操作。Firestore 查询一次只能考虑单个集合中的文档。如果您有来自两个集合的数据用于生成查询结果,您将至少有两个查询要执行。

您唯一真正的选择是引入第三个集合,其中的数据已经从支持您要进行的查询的其他两个集合中合并。这在 NoSQL 类型的数据库中很常见,称为“非规范化”。


推荐阅读