当前位置: 首页 > 知识库问答 >
问题:

考虑组集合查询的firestore数据结构比较

孔海超
2023-03-14

我正在制作一个关于提问和阅读书籍时获得答案的应用程序,使用fiRecovery集合:书籍和用户。对于每个书籍文档,都有一个问题子集合:books/isbn/问题/{问题id}。对于每个自动生成的问题id,有属性包括asker_uid这是提出问题的用户的用户id。

现在,对于一个特定的用户,如果我想列出他问的所有问题。我可以进行组集合查询:

 firebase.firestore().collectionGroup('questions').where('asker_uid', '==', myUser.uid).get()
        .then((snapshot) =>

然后,如果我想在问题列表中显示问题所针对的书籍的详细信息,那么对于快照中的每个问题文档,我可以通过以下属性找到isbn:doc。参考:家长。父母亲id。找到isbn后,我可以再做一次查询,显示该书的标题和作者等,这些都是isbn的属性。

firebase.firestore().collection('books').doc(doc.ref.parent.parent.id).get().then(
           (bookitem) =>

我的问题是,直接把书的所有信息放在问题里是不是更好?(方法好像叫去规范化,https://github.com/firebase/firebase-js-sdk/issues/1798)这样,经过组集合查询,我可以直接得到每个问题快照我需要的所有信息(例如,书名)。缺点是,我需要把每个问题的额外数据放在一本书里。而且一本书里可以有很多问题。

另一种方法是正如我上面的代码块所描述的那样,对于每个问题我都追溯到祖父母id,然后再做一次查询以获取这本书的信息。pro是存储的保存,感觉很干净。con是有额外的查询,目前我仍然停留在如何在我的反应本机代码中的一个useEffects钩子中进行查询的嵌套(第一个集合组查询,然后为每个快照对isbn进行另一个查询)(书籍标题属性可以在第二个查询的代码块内显示console.log,但在它之外变得未定义)。

总的来说,我认为这与前面的问题有些关联:

获取父母从火收集组查询,没有找回儿子

Firestore-获取子集合的父文档

将感谢您的意见/建议!

共有1个答案

程鸿波
2023-03-14

我认为对数据进行去建模的方法更好。自从

  • 它将使您的数据结构具有可伸缩性,如果您通过嵌套的方式来构造数据,您将面临更多类似的情况
 类似资料:
  • 假设我有一组元素,分为多个集合。每个元素都在一个集合中。 我希望能够尽快执行以下查询: 元素在什么集合中? 哪些元素在set中? 我应该使用什么数据结构?我能想到的最好的方法是一张指向一组集合的地图,但我想知道是否有更好的方法? 如果有帮助,可以假设我的集合是整数

  • 我想我读到您可以使用新的Firebase Firestore查询子集合,但我没有看到任何示例。例如,我以以下方式设置了Firestore: 舞蹈[收藏] DanceName 歌曲[收藏] 松南 我如何才能查询“查找所有的舞蹈在songName=='x'”

  • 最近,我从firebase实时数据库迁移到firebase firestore,因为它说查询的速度取决于从集合中检索的数据集的大小(文档数),而不是集合中的文档数。我检查了100、5000和10000个集合中不同数量的文档,在一次查询中检索了20个文档。我看到的是,当我从一个集合中的100个、5000个和10000个文档移动时,查询的结果时间增加了。为什么会这样?是因为firestore处于测试阶

  • 问题内容: 我是Firestore的新手。我想通过使用ID按联接查询从其他集合中获取名称。我该怎么办? 这是一些样本集合。 我有两个集合。员工和部门。 我想查询员工集合,并想添加部门文档作为响应的一部分。这是我尝试获取的示例响应。 这是我获取员工数据的示例代码。 如何为该员工添加部门对象? 问题答案: Firestore没有联接查询。如果要合并两个文档中的数据,则必须分别查询它们,然后根据两个文档