繁体   English   中英

Android Firebase Firestore SDK:如何根据另一个集合的文档字段从集合中订购文档?

[英]Android Firebase Firestore SDK: How to order documents from a collection, according to the field of documents of another collection?

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

在我的 Firebase Firestore 数据库中:

  • 我有一个帖子集合。 每个文档(这是一个帖子)都包含创建它的用户的 ID,以及一个点赞数(我称之为“A”)。

  • 我有另一个用户集合。 每个文档(即用户)都包含一个计数器(我称之为“B”),它计算喜欢的数量,所有帖子的总和。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM