大佬教程收集整理的这篇文章主要介绍了Firebase:查询我的用户参与的所有聊天室,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个集合 message
,其中包含一个文档(代表聊天室)和一个嵌套集合,其中包含该对话的所有消息。
现在我想请求我的用户参与的所有文档(聊天室)。因此,如果 ID1
映射中的 ID2
或 users
字段之一等于我的用户 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,请注明来意。