【问题标题】:How can I access sub collection within every document in collection?如何访问集合中每个文档中的子集合?
【发布时间】:2020-09-14 15:02:25
【问题描述】:

我希望用户能够通过在我的应用中更改类别来选择将显示在墙上的不同类型的食物(仅收藏 8 项)。
我有两个想法如何做到这一点,但我不知道它们是否好。

首先是从 Firestore 中仅获取所选类别的项目。示例:

const foodRef = db.collection("food").doc('${category}').collection('items');

然后获取这些项目,然后使用这些项目设置状态。
这就是我现在的做法,它运行良好,但我认为它不好,因为每次用户更改类别组件时都必须重新渲染,并且用户正在对 firestore 进行不必要的查询。


所以我认为最好从每个文档中获取所有“项目”并将其存储在一个对象中,然后根据所选类别对该对象进行操作。

我的问题是我试图获取集合中每个文档的子集合,但我实际上不知道该怎么做。

我尝试过这样的事情:
const getItems = async () => {
  let snapshot = await firebase.firestore().collection('food').get();
  return snapshot.docs.map(doc => doc.collection('items').forEach(item => item.data()))
}

我知道这行不通,但我想做类似的事情。

我的 Firestore 中的结构如下所示:
food => [16 个文档] => items => [8 个文档]


那么我应该怎么做,一次获取所有项目或每次用户更改类别时呈现?



提前感谢您的时间和帮助伙计们:)

【问题讨论】:

    标签: reactjs firebase google-cloud-firestore


    【解决方案1】:

    您可以使用 firestore collectionGroup 来获取不同文档中的多个子集合。查看此链接以了解有关集合组的详细信息。 https://firebase.googleblog.com/2019/06/understanding-collection-group-queries.html

    在你的情况下,你可能会做这样的事情:

      const everyItems = await firebase.firestore().collectionGroup('items').get();
    

    如果您想了解更多详情,请告诉我:)

    【讨论】:

    • 嗨,谢谢你,这似乎是我需要的,但你能帮助我并告诉我是否应该通过从这 16 个文档中一次获取所有元素来执行此操作,或者最好获取来自这 16 个文档之一的元素,并在每次用户更改类别时进行新查询,因此组件将更新查询集合并重新呈现这些元素?谢谢你的时间:)
    • 由于您要阅读的文档总数相对较少,因此我认为对一个集合组进行单个请求比对每个文档进行多个请求要好。但是,如果将来文档数量增加,比如说超过 1000 个文档,那么每次用户更改类别时都发出请求可能会更好。
    • 谢谢你我真的很感激:)
    猜你喜欢
    • 2020-09-20
    • 2021-12-13
    • 1970-01-01
    • 2022-01-05
    • 2023-01-27
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多