3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
我相信有一些更好的方法可以獲取您想要的數(shù)據(jù):
將您的 Firestore 重組為只有一個(gè)messages集合,如以下示例結(jié)構(gòu):
messages collection
uid
receiverUserId
senderUserId
msg
read
time
使用這種方法,您可以通過(guò)執(zhí)行以下操作來(lái)過(guò)濾正在查看的文檔,例如當(dāng)前經(jīng)過(guò)身份驗(yàn)證的用戶從多個(gè)用戶收到的文檔:
firestore.collection("messages")
.where("receiverUserId", "==", authUid)
.onSnapshot(function(querySnapshot) {
//do whatever
});
創(chuàng)建多個(gè)偵聽(tīng)器,每個(gè)chats文檔一個(gè),以觀察其后續(xù)messages子集合。所以你可以做這樣的未經(jīng)測(cè)試的代碼:
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貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
查看 CollectionGroups 的文檔 - 將您的偵聽(tīng)器設(shè)置為 .collectionGroup("messages") - 您將必須處理所有不同“聊天”文檔的更改。(提示:每個(gè)返回的消息 DocRef 都包含 refPath 字段 - 您可以簡(jiǎn)單地解析它以找到“父”聊天文檔的路徑)

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
為了擴(kuò)展到@LeadDreamer 的回答,這對(duì)我有用,可以使用以下方法收聽(tīng)集合中所有文檔的更改collectionGroup:
const unsub = () =>
onSnapshot(collectionGroup(db, "reservations"), (doc) => {
doc.docs.forEach((d) => {
console.log(d.data());
});
});
添加回答
舉報(bào)