我在firestore中拥有下一个内容结构(一个频道集合,每个频道中都有一个关注者子集合):
channels (is a collection):
- {channel id} (channel document id)
- name,
- description, ...
- followers (subcollection in every channel)
- {user id} (follower document id)
- state (user attribute) = 1 (is active),
我正在尝试查询以获取一个关注者的所有渠道。类似于:
// dart
db.collection('channels').where('followers.$uid.state', isEqualTo: 1).snapshots();
其中$ uid是有效的用户ID。然后,查询结果必须返回用户作为关注者的所有渠道。 我可以使用channel中的一组用户ID来做到这一点,但是我将拥有大量的关注者,并且在数组中,添加或删除关注者时,每次修改时我都必须读写完整的数组。
谢谢!
答案 0 :(得分:1)
唯一的方法不是简单的查询。您可以使用collection group query在符合某些条件的所有渠道中查找所有关注者文档,但是必须使用文档快照中的引用从这些文档的路径中提取通道ID。
db.collectionGroup('followers').where('$uid.state', isEqualTo: 1)
运行该查询,然后迭代每个DocumentSnapshot。每个快照都有一个reference property,其中包含文档的完整路径。使用每个引用的parent property逐步处理引用该通道的DocumentReference,并将其documentID添加到集合中。完成迭代后,该集合将包含您需要的所有内容。