MongoDB 嵌套与分离集合

MongoDB Nested vs Separate Collections

我有一个与数据库相关的一般问题。它更具体地说明了如何处理关于 MongoDB.

的集合

假设我有一个父集合。然后,我有一些与 Parent 分开的 Child 集合。他们每个人都有单独的模式。目前,它们在数据库中作为单独的集合存在。

我通过将 parentId 属性 添加到每个子文档来处理链接。

Some_Child = {
        "parentId" : "some_id",
         rest_of_schema
  } 

这似乎工作得很好。但是,我注意到我现在每次需要 Child 数据时都必须使用两个集合。这会导致更多的代码。 IE。多次订阅,每次我只想对 Child 做点什么时都会调用数据库。

以这种方式构建数据与在每个父文档上仅包含一个 Childs 数组相比,有什么想法?

 Some_Parent = {
        "Childs" : [
                         {child1},
                         {child2},
                         {childN}
],
        Rest_Of_Schema
       }

我对此的担忧是它是否面向未来。假设如果 Child 需要更多数据和功能......那么 Parent 文档最终可能会变得非常大和混乱。此外,从总体上抽象出这两个集合可能会更清晰。

通常情况下,(在 RDMS 中),我什至不会考虑使用选项 #2。所以我只是想知道这是否是文档存储的可接受模式,MongoDB(以及一般的非关系 DBMS)。

有什么见解吗?

只要保证每个父项的子项数量不多,您绝对可以使用选项 #2,因为您不想冒达到 16MB 文档大小限制的风险。

在Mongo中,一对多关系可以分为三种不同的实现方式(各有优缺点):

  1. 一对一:将子文档嵌入父文档可能是最好的方法。
  2. 一对多:将子文档的 ID 列表保存在父文档的数组中。当链接文档的数量很大但不是特别多时有效。
  3. 一比百万:在子文档中保留父ID。这适用于任意数量的子文档。

使用哪一个取决于很多因素,比如导航关系的最可能方式是什么,您是否需要独立于父文档查找子文档等。