【问题标题】:Firestore query based in subcollection attribute基于子集合属性的 Firestore 查询
【发布时间】:2020-03-10 03:05:28
【问题描述】:

我在 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。然后,查询结果必须返回用户作为关注者的所有频道。 我可以在频道中使用一组用户 ID 来做到这一点,但是我会有大量的关注者,并且在数组中,当我添加或删除关注者时,我必须在每次修改中读取和写入完整的数组。

谢谢!

【问题讨论】:

    标签: dart google-cloud-firestore


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我想确保没有直接执行此操作的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多