如何将文件ID添加到Firestore查询的querySnapshot的每个元素中?

时间:2019-06-06 17:55:28

标签: javascript firebase vue.js google-cloud-firestore

我试图将查询快照中每个文档中的文档ID添加到我要推送的数组中相应的元素上,然后提交给状态。

我需要状态为ID的文档,以便可以通过id查询特定文档以进行更新。

我目前正在像Google文档建议的那样使用forEach()遍历快照,但是我试图使用map()将每个元素放入我的cards =[]数组中,同时还包括文档.id放在元素中的某个地方。

     actions: {
      async nuxtServerInit(vuexContext, context) {
        let cards = []
        await db
          .collection('Assets')
          .get()
          .then(snapshot => {
          snapshot.forEach(doc => {
            cards.map(doc.data())
          })

          vuexContext.commit('setCards', cards)
        })
    },

目前我仍在状态

 loadedCards:Array[1]
0:Object
authors:"noFace1"
description:"hopefully this fucking works"
imageurl:Array[1]
slug:"the-big-test-bunny"
title:"The big test bunny"
type:"Video"
user:"VbomJvANYDNe3Bek0suySs1L8oy1"

我需要在状态中包含另一个属性id: xblkujoifduodsifl(只是示例ID)。

2 个答案:

答案 0 :(得分:1)

为此更改此行cards.map(doc.data())

cards.map(doc => {
  const id = doc.id
  const data = doc.data()
  return Object.assign({}, id, { ...data })
})

除非您明确复制ID,否则ID不属于文档

答案 1 :(得分:0)

这是我的有效代码中的详细解决方案:

.db
  .collection("organizations")
  .doc(activeOrganization)
  .collection("people")
  .get()
  .then((snapshot) => {
    if (!snapshot.empty) {
      let people = [];

      snapshot.forEach((doc) => {
        let dict = { ...doc.data(), id: doc.id};
        people.push(dict);
      });
      console.log(people);

    } else {
      reject("No document corresponding to the query!");
    }
  })
  .catch((err) => reject(err));