程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Firebase:查询我的用户参与的所有聊天室大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Firebase:查询我的用户参与的所有聊天室?

开发过程中遇到Firebase:查询我的用户参与的所有聊天室的问题如何解决?下面主要结合日常开发的经验,给出你关于Firebase:查询我的用户参与的所有聊天室的解决方法建议,希望对你解决Firebase:查询我的用户参与的所有聊天室有所启发或帮助;

我有一个集合 message,其中包含一个文档(代表聊天室)和一个嵌套集合,其中包含该对话的所有消息。

Firebase:查询我的用户参与的所有聊天室

现在我想请求我的用户参与的所有文档(聊天室)。因此,如果 ID1 映射中的 ID2users 字段之一等于我的用户 ID,我会收集该文档。

我注意到我不能使用数组查询,因为我使用的是映射而不是数组。

所以我不知道进行该查询的最佳方法是什么。

Stream<List<ChatRoom>> getChatRooms(String userID) {
final messageCollection = FirebaseFirestore.instance.collection('messages');
// var query = messagesCollection.where('users' in [userID])

解决方法

请参阅下面弗兰克的评论:最好的解决方案是“使用一组用户 ID (userIDs: ["ABCDEF","GHIJKL"]) 和一个 array-contains 条件。在这个用例中似乎这将节省所需索引的数量(从而节省存储成本)”。

如果你真的因为其他原因需要保留地图,你可以在文档中很好地拥有这两个字段。复制数据不是问题。


如果你分配给map中每个userId的值不一定有意义,你可以分配一个布尔值true,然后查询如下:

final messageCollection = FirebaseFirestore.instance.collection('messages');
messageCollection.where('users.id1',isEqualTo: true)
  .get()
  .then(...);

因此,您的地图将如下所示:

users
  id1: true
  id2: true

说明:

这个想法是使用用户 ID 作为键,并具有 true 的值。让我们假设两个用户具有以下 ID:“ABCDEF”和“GHIJKL”

而不是像这样的地图

users
  id1: "ABCDEF"
  id2: "GHIJKL"

你可以这样:

users
  ABCDEF: true
  GHIJKL: true

请注意,如果出于某种原因您确实需要保留第一张地图,则您很可能在文档中包含两张地图。

大佬总结

以上是大佬教程为你收集整理的Firebase:查询我的用户参与的所有聊天室全部内容,希望文章能够帮你解决Firebase:查询我的用户参与的所有聊天室所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: