我正在尝试检索所有组的子集合group
和每个组的所有cards
内的所有文档(“西班牙语”,...)
以下返回“西班牙文”组的所有文档
但是如果不知道组名并且存在多个时如何检索文档
db.collection('usersx').doc(this.user.email).collection('group').doc('Spanish').collection('card').get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
console.log(doc.id, ' => ', doc.data())
})
});
期望的结果将是这样:
[
{
"id":"...@gmail.com",
"group":[
{
"Spanish":{
"cards":[
{
"front":"huis",
"back":"house"
},
{
"front":"auto",
"back":"car"
}
]
}
},
{
"English":{
"cards":[
{
"front":"test",
"back":"test"
},
{
"front":"bla",
"back":"blabla"
}
]
}
}
]
}
]
答案 0 :(得分:1)
您需要获取collectionGroup的“卡片”-集合组是跨整个域的 所有结构,并且没有办法限定“父”组中的集合。
您可以 做的是在卡文档中将父名称添加为 field ,例如“ languageField:”(安全操作,因为它是静态的)。 ,然后将其用作查询的一部分:
// to fetch ALL cards
db.collectionGroup('card').get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
console.log(doc.id, ' => ', doc.data())
})
});
//to fetch SOME cards
db.collectionGroup('card').where(fieldRef:'languageField', opstr: '==', value: 'Spanish').get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
console.log(doc.id, ' => ', doc.data())
})
});
顺便说一句,doc.ref包含一个字段refPath,这是FROM ROOT的完全限定路径,您可以解析该路径以查找卡所属的特定语言集合。我使用高度结构化的数据库,并一直使用这种方法,包括通过refPath查找父级。