基于子集合属性的Firestore查询

时间:2020-03-09 18:43:12

标签: dart google-cloud-firestore

我在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来做到这一点,但是我将拥有大量的关注者,并且在数组中,添加或删除关注者时,每次修改时我都必须读写完整的数组。

谢谢!

1 个答案:

答案 0 :(得分:1)

唯一的方法不是简单的查询。您可以使用collection group query在符合某些条件的所有渠道中查找所有关注者文档,但是必须使用文档快照中的引用从这些文档的路径中提取通道ID。

db.collectionGroup('followers').where('$uid.state', isEqualTo: 1)

运行该查询,然后迭代每个DocumentSnapshot。每个快照都有一个reference property,其中包含文档的完整路径。使用每个引用的parent property逐步处理引用该通道的DocumentReference,并将其documentID添加到集合中。完成迭代后,该集合将包含您需要的所有内容。

相关问题