Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

嵌入式数据与引用

在此页面上

  • 嵌入式数据模型
  • 用例
  • 查询嵌入数据
  • 参考
  • 用例
  • 查询规范化数据模型
  • 了解详情

有效的数据模型可支持应用程序的需求。 模式设计的一个关键决策是嵌入数据还是使用引用。

您可以在单个文档中嵌入相关数据。 在以下示例中, contactaccess字段是嵌入式文档:

具有包含所有相关信息的嵌入式字段的数据模型。

嵌入式数据模型通常是非规范化的,其原因是频繁访问的数据在多个集合中重复出现。

嵌入式数据模型允许应用程序在同一数据库记录中查询相关信息。因此,应用程序完成常见操作所需进行的查询和更新操作更少。

在以下场景中使用嵌入式数据模型:

  • 实体之间存在“包含”关系。例如,包含addresscontacts文档。请参阅使用嵌入式文档建立一对一关系模型。

  • 实体之间存在一对多关系。在这些关系中,“多”或子文档在“一”或父文档的上下文中查看。请参见使用嵌入式文档建立一对多关系模型

嵌入具有以下优点:

  • 读取操作性能更佳

  • 在单个数据库操作中检索相关数据的能力

  • 在单次原子写入操作中更新相关数据的能力

如要查询嵌入文档中的数据,请使用点表示法。有关在数组和嵌入文档中查询数据的示例,请参阅:

注意

文档大小限制

MongoDB 中的文档必须小于 16 兆字节。

对于大型二进制数据,可考虑使用 GridFS

引用通过包含从一个文档到另一个文档的链接(称为引用)来存储数据之间的关系。在以下示例中, contactaccess 文档包含对 user 文档的引用。

使用引用链接文档的数据模型。“联系”文档和“访问”文档都包含对“用户”文档的引用。

引用则会产生规范化的数据模型,其原因是数据被分为多个集合,且不会重复。

在以下场景中使用引用来链接相关数据:

  • 内嵌会导致数据重复,但无法提供足够的读取性能优势来抵消重复的不利影响时。例如,当嵌入式数据经常变化时。

  • 您需要表示复杂的多对多关系或大型分层数据集。

  • 相关实体经常被单独查询。例如,如果您有 employeedepartment 数据,则可以考虑在 employee 文档中嵌入部门信息。但是,如果您经常查询部门列表,则应用程序最好使用单独的 department 集合,并通过引用与 employee 集合链接。

为了查询多个集合中的规范化数据,MongoDB 提供了以下聚合阶段:

有关规范化数据模型的示例,请参阅使用文档引用建立一对多关系模型。

有关各种树模型的示例,请参阅对树结构进行建模

有关使用 MongoDB 进行数据建模的更多信息,请下载MongoDB 应用程序现代化指南

下载内容包括以下资源:

  • 介绍使用 MongoDB 进行数据建模的方法

  • 白皮书介绍了从 RDBMS 数据模型迁移到 MongoDB 的最佳实践和注意事项

  • 引用 MongoDB 模式及其 RDBMS 等效模式

  • 应用程序现代化记分卡

后退

数据建模概念