这是我的数据:
我想遍历event_prod
中的每个event_prods
并转到eventGroups
子集合。进入该子集合后,我要遍历eventGroup
中的每个eventGroups
并获取文档数据。
到目前为止,这是我的代码:
async function getAllEventGroups() {
let eventGroups = []
try {
let eventProducerRef = await db.collection('event_prods')
let allEventProducers = eventProducerRef.get().then(
producer => {
producer.forEach(doc => console.log(doc.collection('eventGroups'))
}
)
} catch (error) {
console.log(`get(): there be an error ${error}`)
return []
}
return eventGroups
}
很明显,它不能满足我的要求,但是我无法弄清楚如何访问eventGroups
子集合。未定义“ doc”上的“ collection()”。有人可以帮忙解决此问题吗?顺便说一句,我不在乎是否需要两个(或多个)查询,只要我不必引入永远不会使用的数据即可。
编辑:这不是重复的,因为我知道子集合的名称
答案 0 :(得分:1)
eventProducerRef
是CollectionReference。上的get()方法产生一个QuerySnapshot,您将其存储在producer
中。当您使用forEach()进行迭代时,您将获得一系列QueryDocumentSnapshot对象,这些对象将存储在doc
中。 QueryDocumentSnapshot没有名为collection()
的方法,因为您正在尝试使用它。
如果要进入文档的子集合,请为文档构建DocumentReference,然后调用其collection()方法。为此,您需要使用每个文档的ID。由于QueryDocumentSnapshot子类为DocumentSnapshot,因此您可以为此使用其id属性:
let eventProducerRef = await db.collection('event_prods')
let allEventProducers = eventProducerRef.get().then(
producer => {
producer.forEach(snapshot => {
const docRef = eventProducerRef.doc(snapshot.id)
const subcollection = docRef.collection('eventGroups')
})
}
)
答案 1 :(得分:1)
您在QueryDocumentSnapshot
上呼叫.collection
。该方法不存在。但是随着QueryDocumentSnapshot
扩展DocumentSnapshot
的发展,您可以在其上调用ref
以获得对所请求文档的引用。
```
let allEventProducers = eventProducerRef.get().then(
producer => {
producer.forEach(doc => console.log(doc.ref.collection('eventGroups')) // not the ref here
}
)