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

Tal*_*umy 3 mongoose mongodb

我想知道是否有关于何时使用新文档以及何时使用子文档的经验法则。在 sql 数据库中,我曾经通过规范化规则打破所有关系以分离表并将它们与键连接,但我找不到关于在 mongodb 中做什么的好方法(我不知道其他 no-sql 数据库如何处理)。任何帮助将被赞赏。亲切的问候。

Tal*_*wan 5

虽然没有固定的规则,但在 noSql 中建模数据时,有一些足够直观的通用指南。

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

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

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

  1. 保留一个引用数组。如果您确定数组的大小不会变得太大,并且最好不要期望包含数组的文档更新太多,请选择此选项。
  2. 保留一系列子文档。如果子文档不符合单独集合的条件,并且您不会冒达到 16Mb 文档大小限制的风险,那么这是一个方便的选择。(感谢greyfairer提醒!)
  3. Sql风格的外键。如果 1 和 2 不够好或者您更喜欢这种风格而不是它们,请使用它

用于检索的建模文档文档设计注意事项和来自 Couchbase(另一个 noSql 数据库)的建模关系非常适合阅读,同样适用于 mongodb。

  • 在一对多的情况下,您忘记提及您也可以使用子文档数组,而不是引用数组。如果它是“组合”关系,我更愿意这样做。当然,除非存在达到 16MB 文档限制的风险。 (2认同)