如何监听嵌套子集合中的更改(或获取信息流)?

时间:2020-11-03 18:22:29

标签: firebase flutter dart google-cloud-firestore

我正在为我的应用构建私人聊天功能。我选择了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列表的情况下,是否有一种方法可以仅通过单个查询获取每个聊天线程的快照?如果没有,那有什么解决方案?我是否应该提出不同的云Firestore结构? 谢谢 Chats

2 个答案:

答案 0 :(得分:3)

我认为您可以为每个chatRoom创建一个文档。 databaseRef.collection('privateChats').doc('chatId1+chatId2') 那么用户id1和id2都只能访问文档

答案 1 :(得分:1)

我按照 emir adejuwon 建议

使用rxdart MergeStream函数解决了我的问题