mongodb / mongoose - 何时使用子文档以及何时使用新集合

时间:2017-06-06 11:10:09

标签: mongodb mongoose

我想知道是否有关于何时使用新文档以及何时使用子文档的经验法则。在sql数据库中,我曾经通过规范化规则将所有实现分解为单独的表,并用键连接它们,但是我找不到关于mongodb中要做什么的好approch(我不知道其他的无sql数据库)处理)。 任何帮助都将得到帮助。 亲切的问候。

1 个答案:

答案 0 :(得分:3)

虽然没有固定的规则,但在noSql中建模数据时,有一些直观的指导原则可以遵循。

  • 几乎所有 1-1 的案例都可以使用子文档处理。例如:用户有一个地址。很可能是每个用户的地址都是唯一的(在您的系统环境中,比如社交网站)。因此,在另一个集合中保留地址将浪费空间和查询。地址子文档是最佳选择。

  • 另一个例子:数百名员工共用同一建筑物/地址。在这种情况下,保持1-1是对空间的不良使用,并且只要在任何地址中发生轻微更改,就会花费大量更新,因为它作为子文档被复制到多个员工文档中。因此,地址应该有许多员工,即 1到很多关系

您一定注意到在noSql中有多种方式来表示1对多的关系。

  1. 保留一系列参考文献。如果您确定数组的大小不会太大,请选择此项,并且最好不要更新包含该数组的文档。
  2. 保留一系列子文档。如果子文档不符合单独的集合条件且您没有达到16Mb文档大小限制的风险,那么这是一个方便的选项。 (感谢greyfairer提醒!)
  3. Sql样式外键。如果1和2不够好或者您喜欢这种风格,请使用此
  4. 来自Couchbase的

    Modeling documents for retrievalDocument design considerationsModeling Relationships(另一个noSql数据库)是非常好的读取,同样适用于mongodb。