对于没有NoSQL最佳实践经验的人,将SQL Schema转换到Mongoose模型时,最好的方法是什么。 什么时候应该使用SubDocuments,何时填充以引用其他文档。 是否有任何采用大型SQL模式并将其转换为Mongoose模型的转换器(找不到类似的东西)。
我知道这个问题有点主观且广泛,但是任何参考或线索都将不胜感激。
亲切的问候
答案 0 :(得分:1)
您的问题并不仅仅与Mongoose有关,Mongoose只是MongoDB的ORM,而是与NoSQL数据库的总体设计以及它们与传统SQL数据库的关系。
通常,在以下情况下,最好使用嵌入式(猫鼬中的非规范化子文档)数据模型:
我们有一些信息,需要同时全部检索,经典示例是地址(来源MongoDB网站):
地址:{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
您具有1-to-N关系,其中N个元素始终与1个元素一起在上下文中访问。
因此,通常,当我们不需要自己访问相关实体时,我们会将它们嵌入父对象或通常有意义的另一个对象中。这具有一些优点,例如读取速度最快,数据库操作较少和原子更新。这种模型是NoSQL的商标功能,无模式设计或灵活模式之一。
另一种情况是参考(使用Mongoose中的populate方法进行规范化)数据模型,该模型更适合以下情况:
我们不想通过嵌入来复制dat ,因为这样做不会给我们带来更好的性能,或者仅仅是性能提升不值得增加的复杂性< / strong>。 例如:假设在 Spare Parts 数据库的所有文档中嵌入相同的 Manufacturer 信息,最好有单独的制造商文档,并将对它们的引用放在备用文档中零件文件
我们需要代表N对N \ nested \ complex关系。
我们具有分层结构的数据,出于某种原因我们需要对其进行维护,因此我们关心模式结构并希望保留它。
通常,参考文档的读取性能较差,因为遵循参考通常需要更多查询,当我发现某些内容时,通常需要连续查询以获取详细信息,但这是一种更灵活的数据模型,因为我可以以相同的方式更新或访问文档的每个部分。
可以在这里以及页面后面的链接中找到有关MongoDB设计模式的良好入门。 https://docs.mongodb.com/manual/core/data-model-design/