上下文:以下是我在Firebase Firestore中的收藏和文档的屏幕截图。基本上,每个交易文档都有其自己的字段和内部的聊天收集。
我需要的:我的目标是使用特定的handler_id查询文档并访问其中的聊天集。
发生了什么:此查询仅返回交易字段
db.collection("transaction").where("handler_id", "==", 3)
答案 0 :(得分:2)
Firestore中的查询很浅,这意味着当您通过查询查询文档时,您只会获取正在查询的集合中的相应文档,而不是来自其子集合的文档。
因此,您需要首先查询父transaction
文档(这是一个异步过程),并在获取它时查询子集合(这也是一个异步过程)。
如果我们假设transaction
集合中只有一个文档带有handler_id = 3
,则您可以按照以下步骤进行操作:
db.collection("transaction").where("handler_id", "==", 3).get()
.then(querySnapshot => {
return querySnapshot.docs[0].ref.collection('chat').get();
})
.then(querySnapshot => {
querySnapshot.forEach(doc => {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
});
如果您想为chat
子集合建立一个侦听器,则只需调用onSnapshot()
方法而不是get()
方法,如下所示:
db.collection("transaction").where("handler_id", "==", 3).get()
.then(querySnapshot => {
querySnapshot.docs[0].ref.collection('chat').onSnapshot(querySnapshot => {
// Do whatever you want with the querySnapshot
// E.g. querySnapshot.forEach(doc => {...})
// or querySnapshot.docChanges().forEach(change => {...})
// See https://firebase.google.com/docs/firestore/query-data/listen#listen_to_multiple_documents_in_a_collection
});
});