Firebase 如何构造NoSQL消息以通过1次查询获取未读信息?
假设我有如下NoSQL结构:Firebase 如何构造NoSQL消息以通过1次查询获取未读信息?,firebase,data-structures,nosql,Firebase,Data Structures,Nosql,假设我有如下NoSQL结构: messages chat_id (known) message_id (generated automatically) {author, timestamp, content} 我还有users/分支,在那里我可以看到两个相关用户的最后登录。 我想通过1次查询获得给定用户的未读邮件数 您将如何执行此任务?此问题分为两部分: 计算消息的数量 跟踪用户阅读的内容 计算消息的数量 假设您使用的是Firebase实时数据库或Clou
messages
chat_id (known)
message_id (generated automatically)
{author, timestamp, content}
我还有users/
分支,在那里我可以看到两个相关用户的最后登录。我想通过1次查询获得给定用户的未读邮件数
您将如何执行此任务?此问题分为两部分:
1535725374298
。我现在可以查询聊天室,仅检索比该聊天室更新的消息:
firebase.database()
.ref("chat")
.child(chatId)
.orderByChild("timestamp")
.startAt(1535725374298)
如果您使用的是Firebase身份验证的用户id,uid,它为跨设备的用户提供一致的uid,那么将消息id设置为
/users/$uid
文档就是一种方法
现在,您所要做的就是使用。onSnapshot()
收听/users/$user
文档。一旦客户端采取措施读取快照中的消息,只需从users/$uid
节点删除该消息id即可
如何在users/$uid
(userDocument)中存储消息id取决于您-可以是一个数组,也可以是一个嵌套对象,甚至可以将消息id单独存储为typereference
,只要有识别type==reference
客户端的方法(因此,您可以在实时快照中迭代文档字段以查找未读消息)
这样做的好处是简化了代码/系统。让Firebase在更新时向您发送更新(新的未读消息)。看起来很有希望!您能从Firebase实时数据库的角度解释一下吗?