我在Firestore中有一个名为“步骤”的集合,而在步骤集合内部,我在每个步骤文档中都有很多文档和称为“子步骤”的子集合。我需要创建一个数组,其中将包含所有可以使用此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框架,所以也许这会有所帮助
谢谢
答案 0 :(得分:1)
如果子集合始终被称为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);