【发布时间】:2018-08-27 18:39:40
【问题描述】:
对于没有 NoSQL 最佳实践经验的人来说,将 SQL 模式转移到 Mongoose 模型的最佳方法是什么。 何时应该使用 SubDocuments 以及何时使用 Populate 来引用其他文档。 是否有任何转换器可以采用大型 SQL Schema 并将其转换为 Mongoose 模型(找不到类似的东西)。
我知道这个问题有点主观和广泛,但任何参考或线索将不胜感激。
亲切的问候
【问题讨论】:
对于没有 NoSQL 最佳实践经验的人来说,将 SQL 模式转移到 Mongoose 模型的最佳方法是什么。 何时应该使用 SubDocuments 以及何时使用 Populate 来引用其他文档。 是否有任何转换器可以采用大型 SQL Schema 并将其转换为 Mongoose 模型(找不到类似的东西)。
我知道这个问题有点主观和广泛,但任何参考或线索将不胜感激。
亲切的问候
【问题讨论】:
您的问题与 Mongoose 没有严格关系,Mongoose 只是 MongoDB 的 ORM,而是与一般 NoSQL 数据库的设计以及它们与传统 SQL 数据库的关系如何。
一般来说,最好在以下情况下使用嵌入式(非规范化,Mongoose 中的子文档)数据模型:
我们有一些信息需要同时全部检索,经典的例子是地址(来源MongoDB网站):
地址:{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
您有一对 N 的关系,其中 N 个元素始终在第一个元素的上下文中访问。
所以一般来说,当我们不需要自己访问相关实体时,我们会将它们嵌入到父对象中,或者通常是另一个有意义的对象。这有一些优势,比如最快的读取、更少的数据库操作和原子更新。这种模型是 NoSQL 的标志性特征之一,无模式设计或灵活模式。
另一种情况是引用(标准化,使用 Mongoose 中的填充方法)数据模型,它更适合以下情况:
我们不想通过嵌入来复制数据,因为这样做不会给我们带来更好的性能,或者仅仅是性能提升不值得增加复杂性。 例如:想象在 Spare Parts 数据库的所有文档中嵌入相同的 Manufacturer 信息,最好有单独的制造商文档并将引用它们放在备件中零件文件
我们需要表示 N-to-N\nested\complex 关系。
我们有分层结构中的数据,出于某种原因我们需要维护它,因此我们关心架构结构并希望保留它。
可以在此处和页面后面的链接中找到有关 MongoDB 设计模式的良好入门。 https://docs.mongodb.com/manual/core/data-model-design/
【讨论】: