嵌入式数据与引用
有效的数据模型支持您的应用需求。您模式设计的关键决策之一是是否嵌入数据 或 使用引用。
嵌入式数据模型
您可以在单个文档中嵌入相关数据。在下面的例子中,联系
和访问
字段是嵌入文档
嵌入式数据模型通常是非规范化的,因为频繁访问的数据在多个集合中重复。
嵌入式数据模型允许应用程序在同一数据库记录中查询相关信息。因此,应用程序在完成常见操作时需要更少的查询和更新。
用例
以下场景中可以使用嵌入式数据模型
实体之间存在“包含”关系。例如,一个包含
地址
的联系
文档。参见使用嵌入式文档建模一对一关系.实体之间存在一对一关系。在这些关系中,“多”或子文档是在“一”或父文档的上下文中查看的。参见使用嵌入式文档建模一对一关系。
嵌入提供以下好处
读取操作性能更优
能够在单个数据库操作中检索相关数据
能够在单个原子写操作中更新相关数据
查询嵌入式数据
要查询嵌入式文档中的数据,请使用点符号。有关查询数组中数据以及嵌入式文档的示例,请参阅
参考文献
参考文献通过包含从一份文档到另一份文档的链接,即所谓的引用
,来存储数据之间的关系。在以下示例中,contact
和access
文档包含对user
文档的引用。
参考文献导致数据模型规范化
,因为数据被分割成多个集合,而不是重复。
用例
在以下场景中,请使用引用来链接相关数据
嵌入会导致数据重复,但不会提供足够的读取性能优势来抵消重复的影响。例如,当嵌入的数据频繁变化时。
您需要表示复杂的许多对多关系或大型层次数据集。
相关的实体经常单独查询。例如,如果您有
employee
和department
数据,您可以考虑在employee
文档中嵌入部门信息。但是,如果您经常查询部门列表,您的应用程序使用与employee
收集相连的单独的department
收集将表现最佳。
查询规范化的数据模型
要查询多个集合中的规范化数据,MongoDB 提供以下聚合阶段
有关规范化数据模型的示例,请参阅 使用文档引用建模一对一关系。
有关各种树模型的示例,请参阅 建模树结构。
了解更多信息
有关使用 MongoDB 进行数据建模的更多信息,请下载 MongoDB 应用程序现代化指南。
下载内容包含以下资源
MongoDB 数据建模方法的演示文稿
关于从 RDBMS 数据模型迁移到 MongoDB 的最佳实践和考虑的论文
包含其 RDBMS 相应方案的 MongoDB 引用模式
应用程序现代化评分卡