我有一个名为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()))
})
}
但是它什么也不打印。目标是对所有文档每月一次的收集进行迭代。
答案 0 :(得分:1)
除了道格指出的问题(您需要使用ref
的{{1}}属性)之外,还需要考虑get()
方法是异步的。
这样做
QueryDocumentSnapshot
不起作用。
如果您不能使用集合组查询(例如,假设您的users.forEach(snapshot => {
var monthlies = snapshot.ref.collection('monthlies').get()
console.log(monthlies.docs.map(doc => doc.data()))
})
函数仅返回所有用户的子集,例如给定国家/地区的所有用户),则可以使用Promise.all()
如下:
getUsers()
或,您可以使用此article中介绍的技术来了解如何在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()));
});
}
内使用异步/等待。
答案 1 :(得分:0)
在您的代码中,filebeat.prospectors:
- input_type: log
paths:
- /var/log/**/*
是QueryDocumentSnapshot类型的对象。它没有名为element
的方法,因此我希望您的代码会因日志错误而崩溃。
如果要引用由QueryDocumentSnapshot表示的文档下组织的子集合,则应基于其ref属性:
collection()
或者,如果您只想查询所有称为“每月”的子集合中的所有文档,则可以用一个collection group query来简化。