如何在Firebase Firestore中的每个文档的子集合中获取文档?

时间:2020-10-08 12:16:03

标签: javascript html firebase google-cloud-firestore

如何使用JavaScript在Firebase Firestore中获取子集中的“ userPosts”子集中的所有文档?您可以在下面的图片中看到我的数据库结构。

这是我尝试过的:

firebase.auth().onAuthStateChanged(function(user) {

    var postRef = database.collection('posts').doc().collection('userPosts');

    postRef.get().then(snapshot => {
        setupPosts(snapshot.docs)
    })

    const posts = document.querySelector('.posts');

    const setupPosts = (data) => {

        let html = '';
        data.forEach(doc => {
            const post = doc.data();

            console.log(post)

            const li = `
            <li>
                <div class="title">${post.title}</div>
                <div class="content">${post.content}</div>
            </li>
            `;
            html += li
        })

        posts.innerHTML = html;

    }
})

此代码应执行的操作是在子集合“ userPosts”中获取文档。它应该进入“ posts”集合中的每个文档,然后进入“ userPosts”并获得该子集合中的每个文档。

First collection "posts"

Subcollection "userPosts"

2 个答案:

答案 0 :(得分:1)

听起来您想要collection group query。这将为您提供所有名为“ userPosts”的子集合中的所有文档:

const query = database.collectionGroup("userPosts")
query.get().then(querySnapshot => { ... })

答案 1 :(得分:0)

这行没有意义:

var postRef = database.collection('posts').doc().collection('userPosts');

database.collection('posts').doc()创建对posts集合中不存在的新文档的引用。自从您成为其userPosts子集合以来,这当然将不存在/为空。


如果您想为userPosts参数获取user子集合,并且根据用户的UID存储用户,则该用户将是:

var postRef = database.collection('posts').doc(user.uid).collection('userPosts');