3 回答
TA贡献1875条经验 获得超3个赞
我相信有一些更好的方法可以获取您想要的数据:
将您的 Firestore 重组为只有一个messages集合,如以下示例结构:
messages collection
uid
receiverUserId
senderUserId
msg
read
time
使用这种方法,您可以通过执行以下操作来过滤正在查看的文档,例如当前经过身份验证的用户从多个用户收到的文档:
firestore.collection("messages")
.where("receiverUserId", "==", authUid)
.onSnapshot(function(querySnapshot) {
//do whatever
});
创建多个侦听器,每个chats文档一个,以观察其后续messages子集合。所以你可以做这样的未经测试的代码:
firestore.collection('chats').get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
var eachChatRef = firestore.collection('chats').doc(doc.documentID)
var messagesRef = eachChatRef.collection("messages");
messagesRef.onSnapshot(function(snapshot) {
snapshot.docChanges().forEach(function(messageDoc) {
// Do whatever
});
});
});
});
TA贡献1802条经验 获得超10个赞
查看 CollectionGroups 的文档 - 将您的侦听器设置为 .collectionGroup("messages") - 您将必须处理所有不同“聊天”文档的更改。(提示:每个返回的消息 DocRef 都包含 refPath 字段 - 您可以简单地解析它以找到“父”聊天文档的路径)
TA贡献1860条经验 获得超9个赞
为了扩展到@LeadDreamer 的回答,这对我有用,可以使用以下方法收听集合中所有文档的更改collectionGroup:
const unsub = () =>
onSnapshot(collectionGroup(db, "reservations"), (doc) => {
doc.docs.forEach((d) => {
console.log(d.data());
});
});
添加回答
举报