是否有可能在Firestore:获得顶级项目,然后为每个这些项目,查询他们的顶级子项(在一个子集合),都在一个去?<



我的Firestore是这样组织的:

├── posts/
│   ├── post1/
│   │   ├── comment1
│   │   ├── comment2
│   │   ├── ...
│   ├── post2/
│   │   ├── comment1
│   │   ├── comment2
│   │   ├── comment3
│   │   ├── ...
│   ├── ...

是否有一种方法,例如,让我查询最近的帖子,对于这些帖子的每个,获得最近的评论,都在一次?(即不存储post查询,然后创建本地的for-each查询;获取各自的评论)

理想情况下,我甚至想超越这一点:我也想获得帖子本身,所有这些都是一次性的。这对于创建一个包含整个应用程序活动摘要的视图非常有用,例如

我有感觉,这是不可能与Firestore虽然。据我所知,它们遵循的策略是不将同一查询中不同级别/(子)集合上的文档混合在一起。

我现在正在使用Dart,但我想这个问题有点语言不可知论。我想象这样的查询是这样的形状:

ref 
.collection('posts')
.orderBy('date')
.forEach()
.collection('comments')
.orderBy('date');

Firestore只能返回来自单个集合的文档,或者所有具有相同名称的集合。同样,它只能过滤它返回的文档中已知字段中存在的数据。

因此,如果评论在每个帖子下的子集合中,则需要运行单独的查询来获取它们。

一个常见的解决方法是将N个最近的评论存储在post文档本身中,而不是存储在子集合中。这样一来,写操作就会变得复杂一些,但它可以让您更有效地读取所需的数据。

在处理NoSQL数据库时,这种类型的数据重复是非常常见的,这也是它们在读操作上伸缩性如此之好的原因之一。要了解更多关于这种权衡的知识,我建议阅读NoSQL数据建模并观看了解Cloud Firestore。

相关内容

  • 没有找到相关文章

最新更新