繁体   English   中英

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

[英]firestore data structure comparison considering group collection query

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

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

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

然后,如果在问题列表中我想显示提出问题的书籍的详细信息,对于快照中的每个问题文档,我可以通过属性找到 isbn: doc.ref.parent.parent.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,然后再进行一次查询以获取本书的信息。 专业人士节省了存储空间,感觉很干净。 缺点是还有其他查询,目前我仍然坚持如何在我的 react native 中的 useEffect 挂钩中进行查询嵌套(第一个集合组查询,然后为每个快照执行另一个 isbn 查询)代码(书名属性可以在第二个查询的代码块内使用 console.log 显示,但在它之外变得未定义)。

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

从 Firestore 集合组查询中获取父母,而不检索儿子

Firestore - 获取子集合的父文档

非常感谢您的意见/建议!

我认为 Denomolize 数据的方法更好。 自从

  • 它将使您的数据结构具有可扩展性,如果您通过嵌套构造数据,您将面临更多这样的情况

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM