firebase - 如何从嵌套子集合中监听更改(或获取流)?

标签 firebase flutter dart google-cloud-firestore

我正在为我的应用程序构建私有(private)聊天功能。我选择 Firestore 作为我的后端,下面是聊天线程和消息的结构。privateChats - chatId1 - chatId1 - messageId1, messageId2,...collection - document - collection - documents这是截图database structure
我想要实现的是获取每个聊天线程(chatId1,chatId2,...)的快照及其相应的消息(最后一个文档/消息已发送)并显示如下 - 请参阅聊天屏幕
我试过类似的东西databaseRef.collection('privateChats').where('chatId', whereIn: chatList).snapshots();然而,从上面的快照返回的流只监听 createdAt 的字段的变化。字段存在。
这给了我一个唯一的选择来为每个这样的聊天线程获取单独的快照databaseRef.collection('privateChats').doc('chatId1).collection('chatId1).snapshots();databaseRef.collection('privateChats').doc('chatId2).collection('chatId2).snapshots();并以某种方式将这些快照组合成单个流(我不知道如何)
所以我的问题是 - 有没有办法在给定聊天 id 列表时只用一个查询来获取每个聊天线程的快照?如果没有,有什么解决办法?我应该想出不同的云火库结构吗?
谢谢
Chats

最佳答案

我认为你可以做的是为每个聊天室创建一个文档 ..就像说databaseRef.collection('privateChats').doc('chatId1+chatId2')那么用户 id1 和 id2 都只能访问该文档

关于firebase - 如何从嵌套子集合中监听更改(或获取流)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64668419/

相关文章:

flutter - 如何在timePicker中格式化时间

dart - 如何在 flutter 中只为 TextField 禁用 splashColor?

折叠时,条子标题从中心向左 flutter

firebase - 如何从Firebase存储中获取图像链接

javascript - 访问 firebase 存储试图获取文件 url 时出现错误 400

angular - 如何从 Google Chrome 修复此警告? Cookie... `SameSite=None` 但没有 `Secure`

Flutter - 第一个屏幕仅在真实的 iOS 设备上损坏,在 Android 和模拟器上都不会损坏

flutter - 如何在启动时捕获 flutter 应用程序崩溃

flutter - 如何将 Future<dynamic> 转换为 dart 中的字符串 :flutter

android - 在 Firebase 云消息传递中将一个项目用于多个应用程序的优缺点