javascript - 如何递归获取所有子集合的集合?

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

我在 firestore 中有一个名为“steps”的集合,在步骤集合中我有很多文档和子集合,每个步骤文档中都有一个名为“substeps”的子集合。我需要创建一个数组,其中包含我可以使用的所有步骤和子步骤 component , 所以数组应该是这样的

let steps = [
  {
    step: 1,
    id: '1'
    substeps: [
      {
        step: '1.1'
        substeps: [
          {
            step: '1.1.2'
          }
        ]
      }
    ]
  }
]

现在我想创建递归函数,如果它们存在,将获取所有子步骤

我试图创建应该获取所有子集合的函数,但我不知道如何完成它,所以下面是我尝试过的示例,但注意函数没有完成,这只是第一步 这是 documentation

fetchAllStepsDeep (request) {
    //this.steps = array of objects with step data
    let result = []
    let requestLocal = this.$firebaseFirestore.collection('steps_for_classes')

    for (let i in this.steps) {
        result.push(this.steps[i])
        requestLocal.doc(this.steps[i].id).get().then((doc) => {
            if (doc.exists) {
                console.log('Document data:', doc.data())
            } else {
                // doc.data() will be undefined in this case
                console.log('No such document!')
            }
        }).catch((error) => {
            console.log('Error getting document:', error)
        })
    }
}

有人可以帮我检索集合中的所有子集合并创建一个包含其他对象子数组的大数组吗?我使用 vue 框架,所以这可能会有所帮助

谢谢

最佳答案

如果子集合总是调用substeps,您可以创建一个辅助函数来处理递归

function getSubstepsOf(docRef, path, result) {
  docRef.collection("substeps").get((querySnapshot) => {
    querySnapshot.forEach((doc) => {
      result.push({ path, doc });
      getSubstepsOf(doc.ref, `${path}/substeps/${doc.id}`, result);
    });
  });
}

然后从您现有的代码中调用它:

getSubstepsOf(doc.ref, doc.id, result);

关于javascript - 如何递归获取所有子集合的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56646608/

相关文章:

javascript - 访问回调中的类属性

javascript - 单击时更改 Canvas 图像

javascript - 我如何分批使用可迭代对象(大小相同的 block )?

android - Firebase 错误 : Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app)

javascript - diff 2 数组,其中的项目只是重新排序

javascript - 刷新后,firebase Auth当前用户返回null

javascript - 类型 'update' 上不存在属性 'quantity' 和 '{ }'

javascript - 如何获取当前Vue组件的DOM元素?

vue.js - 如何防止默认,然后用 VueJS 提交默认

javascript - Vue Transition - 动画延迟表现得很奇怪/不起作用