我在 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/