【问题标题】:How can I get documents inside a subcollection in every document in Firebase Firestore?如何在 Firebase Firestore 中的每个文档的子集合中获取文档?
【发布时间】:2021-01-23 11:44:20
【问题描述】:

如何使用 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"

【问题讨论】:

标签: javascript html firebase google-cloud-firestore


【解决方案1】:

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

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

【讨论】:

  • 在嵌套的 Promise 和循环中挣扎了好几个小时(不工作),这拯救了我的一天!
【解决方案2】:

这行没有意义:

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

database.collection('posts').doc() 创建一个对posts 集合中不存在的新文档的引用。既然你那么它的userPosts 子集合,这当然不会存在/是空的。


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

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

【讨论】:

  • 但是我不想获取一个以 UID 作为 docID 的特定文档,我想获取每个文档然后进入子集合,如果你理解的话。
猜你喜欢
  • 1970-01-01
  • 2018-10-21
  • 2021-08-06
  • 1970-01-01
  • 2021-05-09
  • 2020-08-15
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
相关资源
最近更新 更多