[英]How to get a collection inside a document on Firestore?
我有一个名为users
的集合,在每个文档的用户中有一个名为monthlies
的集合,我想得到它。 这是结构:
现在,我尝试使用以下方法获取它:
var getUsers = async function() {
var db = firebase.firestore()
var users = await firebase
.firestore()
.collection("users")
.get();
return users
}
var getMonthlyByUserId = async function () {
var users = await getUsers()
users.forEach(element => {
var monthlies = element.collection('monthlies').get()
console.log(monthlies.docs.map(doc => doc.data()))
})
}
但它什么也不打印。 目标是迭代集合中所有文档的月刊。
除了 Doug 指出的问题(需要使用QueryDocumentSnapshot
的ref
属性)之外,还需要考虑get()
方法是异步的。
这样做
users.forEach(snapshot => {
var monthlies = snapshot.ref.collection('monthlies').get()
console.log(monthlies.docs.map(doc => doc.data()))
})
不管用。
如果您不能使用集合组查询(例如,假设您的getUsers()
函数仅返回所有用户的子集,例如给定国家/地区的所有用户),您可以使用Promise.all()
如下:
var getMonthlyByUserId = async function () {
const users = await getUsers();
const promises = [];
users.forEach(snapshot => {
promises.push(snapshot.ref.collection('monthlies').get());
});
const monthlies = await Promise.all(promises);
monthlies.forEach(snapshotArray => {
console.log(snapshotArray.docs.map(doc => doc.data()));
});
}
或者,您可以使用本文中描述的关于如何在forEach()
使用 async/await 的技术。
在您的代码中, element
是一个QueryDocumentSnapshot类型的对象。 它没有名为collection()
的方法,因此我希望您的代码会因日志中的错误而崩溃。
如果要引用由 QueryDocumentSnapshot 表示的文档下组织的子集合,则应基于其ref属性进行构建:
users.forEach(snapshot => {
var monthlies = snapshot.ref.collection('monthlies').get()
console.log(monthlies.docs.map(doc => doc.data()))
})
或者,如果您只想查询名为“monthly”的所有子集合中的所有文档,您可以使用单个集合组查询来简化它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.