【问题标题】:Accessing the collection inside a document of a parent collection in firestore访问firestore中父集合的文档中的集合
【发布时间】:2022-01-05 03:49:10
【问题描述】:

我正在寻找名为 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。

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

【问题讨论】:

  • 您是想设置一个监听器(使用onSnapshot)还是只想一次获取所有这些文档(例如使用get())?

标签: reactjs firebase google-cloud-firestore


【解决方案1】:

我已尝试获取全部数据

查看您为获取“整个数据”(即第二个 sn-p)编写的代码,您似乎不需要在获取 @ 时将 post 文档链接到父 user 文档987654325@ 文件。换句话说,我了解您希望独立于 user 文档来获取所有 posts 集合。

因此您可以使用Collection Group query


如果您需要,对于集合组查询返回的每个post 文档,获取父user 文档(例如显示作者姓名),您可以按照此SO answer 中的说明进行操作,即使用parent 属性。

【讨论】:

  • 它使用集合组查询工作。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-08-16
  • 2020-09-20
  • 1970-01-01
  • 2019-10-06
  • 2018-03-21
  • 1970-01-01
  • 2018-05-11
  • 2022-07-08
相关资源
最近更新 更多