【问题标题】:Cloud Firestore: Filter based on object content (via Flutter)Cloud Firestore:基于对象内容的过滤器(通过 Flutter)
【发布时间】:2018-09-07 16:22:14
【问题描述】:

我正在使用以下 Firestore 设置:

现在我想接收当前用户(给定的 uid)在用户对象/列表中的所有文档。 users 是引用用户集合的对象。

理想情况下,我希望将 Flutter 中的这个过滤器与 cloud_firestore 包一起使用,但是现在我只是对这是否可能感兴趣。

【问题讨论】:

    标签: firebase dart google-cloud-firestore flutter


    【解决方案1】:

    是的。这个有可能。但是,您需要将用户引用存储为值映射,并在客户端中创建查询引用(基于用户 ID)。看看文档:Working with Arrays, Lists and Sets

    【讨论】:

      【解决方案2】:

      我发现this 的帖子解释说,目前不可能像我想象的那样。 我将设置更改为:

      我现在可以使用 Flutter 的这个查询来接收给定用户的聊天记录

      Firestore.instance
          .collection('chats')
          .where('users.' + _auth.currentUser.uid, isEqualTo: true)
          .snapshots
          .listen((data) {...});
      

      我还使用此规则来确保用户只能访问他正在参与的聊天:

      match /chats/{chatId} {
        allow read: if resource.users[request.auth.uid];
        // write rule yet to create
      }
      

      【讨论】:

      • 不要在地图中将 userID 的值设置为 true,而应在此处放置时间戳,如我链接的文章中所述。使用您当前的答案,您将无法根据时间按特定顺序对消息进行排序。它们将以随机(按文档 ID)顺序出现。
      • 请问,您是如何解决 Firestore 索引问题的。添加另一个 .where 子句时,firestore 要求添加一个带有 UID 值的索引,这显然没有意义。
      • 如果我想使用 'where' 子句更新其中一个文档,该怎么做? (文档 id 未知,这就是我使用 'where' 子句的原因)
      • 很好,谢谢!这为我节省了相当多的时间......我不敢相信颤动的火库有如此弱的查询能力。 :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2021-10-16
      • 2020-12-13
      相关资源
      最近更新 更多