在Firestore中获取嵌套文档

时间:2018-07-17 15:23:07

标签: javascript firebase google-cloud-firestore

这是我的数据:

enter image description here

我想遍历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()”。有人可以帮忙解决此问题吗?顺便说一句,我不在乎是否需要两个(或多个)查询,只要我不必引入永远不会使用的数据即可。

编辑:这不是重复的,因为我知道子集合的名称

2 个答案:

答案 0 :(得分:1)

eventProducerRefCollectionReference。上的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
      }
    )