firebase - 如何从嵌套子集合中侦听更改(或获取流)?
问题描述
我正在为我的应用程序构建私人聊天功能。我选择 Firestore 作为我的后端,下面是聊天线程和消息的结构。
privateChats
- chatId1
- chatId1
-messageId1, messageId2,...
collection
- document
- collection
-documents
我想要实现的是获取每个聊天线程(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 列表时只用一个查询来获取每个聊天线程的快照?如果没有,有什么解决办法?我应该想出不同的云火库结构吗?谢谢
解决方案
我认为您可以做的是为每个聊天室创建一个文档 ..就像说
databaseRef.collection('privateChats').doc('chatId1+chatId2')
用户 id1 和 id2 都只能访问该文档
推荐阅读
- php - PHP Try Catch 逻辑正确
- javascript - 在不同上下文中创建的 html 字符串中插入 JS 变量
- openmp - OpenMP 任务 - 以及“OpenMP if”的成本
- c# - ASP.NET Core 身份 [Authorize(Roles ="ADMIN")] 不起作用
- angular - 在订阅或使用 RxJS 的自定义运算符中做事情更好吗?
- python - 在 Beeware 上制作一个按钮打开一个窗口
- css - 在 React Material UI 中对齐文本
- python - 关于python虚拟环境的困惑
- c# - c#如何将对象转换为动态类型?
- javascript - 如何访问类函数内部的状态?