如何在集合中的每个文档中访问子集合?

时间:2020-09-14 15:02:25

标签: reactjs firebase google-cloud-firestore

我希望用户可以通过更改应用程序中的类别来选择将在墙上显示的不同类型的食物(仅收集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中的结构如下所示:
食物=> [16个文档] =>项目=> [8个文档]


那么,我该怎么做,一次获得所有项目,还是每次用户更改类别时都进行渲染?



感谢您的时间和帮助,提前通知:)

1 个答案:

答案 0 :(得分:1)

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

在您的情况下,您可能可以执行以下操作:

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

让我知道是否需要更多详细信息:)