如何在一次调用中获取Firebase中子集合的子集合

时间:2020-06-02 21:59:29

标签: javascript firebase google-cloud-firestore

我有一个像这样的firebase模式: 帖子>帖子(文档)>评论>评论(集合)>回复>回复(文档)

const allComments = await firebase
  .collection('posts')
  .doc(params.slug as string)
  .collection('comments')
  .orderBy("date", "desc")
  .get()

如果我试图得到这样的答复:

const allComments = await firebase
  .collection('posts')
  .doc(params.slug as string)
  .collection('comments')
  .doc("some_random_id")
  .collection('reply')
  .get()

我只会得到答复,而不是所需的输出。 我需要在一个电话中获得每个评论的每个回复。 因此返回的对象将是每个注释,每个注释都包含一个答复对象。

1 个答案:

答案 0 :(得分:1)

Firestore查询是“浅”的,并且仅在被查询的集合内立即返回文档。他们不考虑子集合中的任何文档。要从子集合中获取文档,您需要对每个子集合进行另一个查询。

最好将所有评论和答复简单地放在一个集合中,并用一个布尔值将它们标记为一个布尔值(表明是否答复),然后在查询中将其用作过滤器。集合的大小不会对性能产生任何影响。