与子集合相比,在 Firestore 中使用根集合有哪些好处?

And*_*rew 12 firebase google-cloud-firestore

随着集合组查询的出现,我不清楚使用根集合有什么好处。在Firestore 团队的这篇文章中,我唯一看到的是存在名称冲突的可能性,安全规则稍微复杂一些,并且您必须手动创建任何查询索引。是否还有其他原因使用根集合而不是子集合/集合组查询?

Ale*_*amo 17

在决定使用顶级集合还是子集合哪个更好时,请注意,两者在速度或计费方面并不比另一个更好。但是,存在一些细微的差异,可能会让您选择使用顶级集合而不是子集合。因此,唯一的差异可能来自我们构建数据库的方式,而不是性能。这是因为 Firestore 在 1 级和 100 级时的速度一样快。

假设我们有以下使用子集合的结构:

Firestore-root
  |
  --- shops (collection)
       |
       --- $shopId (document)
              |
              --- products (sub-collection)
                    |
                    --- productId (document)
Run Code Online (Sandbox Code Playgroud)

该模式还可以设计为:

Firestore-root
  |
  --- shops (collection)
  |    |
  |    --- $shopId (document)
  |
  --- products (collection)
       |
       --- $productId (document)
              |
              --- shopId: $shopId
Run Code Online (Sandbox Code Playgroud)

对于 NoSQL 数据库,推荐的做法是将数据库扁平化。为什么?因为它看起来更有组织性,并且每个顶级集合仅包含与集合本身相关的文档。

当谈到子集合时,当我们查看上面的示例时,每个产品都与“products”子集合、$shopId 和“shops”集合相关联。

关于安全规则,复杂性取决于您需要使用的过滤器的数量和多样性。然而,对于顶级集合来说,这要容易一些。

最后,请记住,当我们谈论架构时,我们总是根据我们打算执行的查询来构建 Firestore 数据库。因此,您可以在这两个选项之间进行选择,看看哪一个可以让您的生活更轻松。

编辑:

正如文档中关于 Firestore 数据结构的说明:

根级集合适用于多对多关系,并在每个集合内提供强大的查询。