繁体   English   中英

如何在 Firestore 上的文档中获取集合?

[英]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 指出的问题(需要使用QueryDocumentSnapshotref属性)之外,还需要考虑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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM