访问 firestore 中父集合的文档内的集合

问题描述 投票:0回答:1

我正在寻找名为 users 的集合的数据,该集合的文档的 id 为登录用户的 uid。此外,这些文档包含一些数据和一个名为 posts 的子集合。 看起来像 -

所以现在,我需要一起获取所有四 (4) 个文档以及 posts 集合数据,以便我可以显示它。

我的方法- (这里我获取了文档 ID - 图像 ID 的中间部分)

// Fetching Firestore Users Document IDs

const [userDocs, setUserDocs] = React.useState([]);

  React.useEffect(() => {
    try {
      const data = firestore.collection('users')
        .onSnapshot(snap => {
          let docIDs = [];
          snap.forEach(doc => {
            docIDs.push({id: doc.id});
          });
          setUserDocs(docIDs);
        })
    }
    catch(err) {
        console.log(err);
    }
  }, [])

现在,我尝试使用以下方式获取整个数据(这是行不通的)

// Fetching Firestore Posts Data

const [postData, setPostData] = useState([]);
  React.useEffect(() => {
      try {
        userDocs.map(data => {
          const data = firestore.collection('users/'+currentUser.uid+'/posts')
          .onSnapshot(snap => {
            let documents = [];
            snap.forEach(doc => {
              documents.push({...doc.data(), id: doc.id});
            });
            setPostData(documents);
          })
        })
      }  
      catch(err) {
          console.log(err);
      }
    }, [])

最后,我应该得到 postData 数组,我可以将其映射到我的卡片组件上,以将所有发布的图像和标题渲染到 UI。

我不确定这是否是实现我在这里所做的事情的正确方法,请帮助我纠正这个错误,如果有更微妙和简单的方法来做到这一点,请告诉我。谢谢你。

reactjs firebase google-cloud-platform google-cloud-firestore
1个回答
2
投票

我尝试获取全部数据

查看您为获取“整个数据”(即第二个片段)编写的代码,在获取

post
文档时,您似乎不需要将
user
文档链接到父
post
文档。换句话说,我知道您想要独立于
posts
文档来获取所有
user
集合。

因此您可以使用集合组查询


如果您需要,对于 Collection Group 查询返回的每个

post
文档,获取父
user
文档(例如显示作者姓名),您可以按照此 SO 答案 中的说明进行操作,即使用
parent
属性。

© www.soinside.com 2019 - 2024. All rights reserved.