我有这样的结构:
- collection(A) // there is two collections in the Firestore in the top.
// But I only wrote one the collection because it gets longer
- doc(918409234)
-collection(B)
- doc(918409234)
object is stored here
- doc(213123133)
object is stored here
- doc(332222212)
object is stored here
- doc(029299292)
object is stored here
- doc(434352342)
object is stored here
- doc(341234123)
-collection(B)
- doc(918409234)
- doc(213123133)
- doc(332222212)
- doc(029299292)
- doc(434352342)
- doc(341234123)
-collection(B)
- doc(918409234)
- doc(213123133)
- doc(332222212)
- doc(029299292)
- doc(434352342)
所以我想检索集合B下的节点,但它似乎不起作用。我的代码出了什么问题?
何时发布:
function send() {
let path = db.collection(A).doc(randomnumber).
return path.collection(B).doc(randomnumber).set(object);
}
何时提取:
function fetch() {
return db.collection(A).get().then(value => {
value.forEach((doc => {
console.log(doc.id, '=>', doc.data());
}));
return value;
}).catch(err => {
console.log('error found' + err)
return err;
})
}
let snapshot = await firestore.fetch();
console.log('Snapshot: ' + snapshot); // prints [Object, Object]
snapshot.forEach(child => {
let query = child.data();
console.log('Each data: ' + query.B); // not printed in the console
});
但我拿不到第一批文件。因此,我无法进入下一步以获取下一个集合(在本例中为集合B(。fetch方法被调用,但仅打印为[Object,Object]。这个代码出了什么问题?我希望在上面的例子中获取三个节点。我做错了吗?我想获取所有分配了随机数的文档
更新
所以问题解决了。您无法访问嵌套集合(希望从现在开始(。
如何从Firestore中检索两个集合下的节点?
没有办法做到这一点。Firestore查询是浅层的,它们只从运行查询的集合中获取项。无法在单个查询中从顶级集合和其他集合或子集合获取文档。Firestore不支持在一个步骤中跨不同集合进行查询。单个查询只能使用单个集合中文档的属性。
所以我想检索集合B 下的节点
如果您想获取B集合中的所有文档,您需要知道该文档id(918409234(,以便创建正确的引用并相应地查询该子集合。在不知情的情况下,你无法获得这些文件。为了解决这个问题,您应该将随机文档id存储到一个变量中,并在引用中使用它,或者将文档id设置为已知id,比如用户id。