Docs 菜单
Docs 主页
/ /

MongoDB模式中的引用数据

引用通过包含从一个文档到另一文档的链接(称为引用)存储数据之间的关系。应用程序可以解析这些引用以访问权限相关数据。在以下示例中,contactaccess 文档包含对user 文档的引用。

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

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

尽管非规范化数据模型适用于MongoDB中的大多数使用案例,但在以下情况下,请考虑使用引用而不是嵌入式数据:

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

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

  • 您需要经常单独查询相关实体。

在某些情况下,您可以选择将相关信息存储在多个集合中,而不是单个集合中。

假设有这样一个示例集合 logs,其中存储各种环境和应用程序的日志文档。logs 集合包含以下形式的文档:

{ log: "dev", ts: ..., info: ... }
{ log: "debug", ts: ..., info: ...}

如果文档总数较少,您可以按类型将文档分组到集合中。对于日志,请考虑使用不同的日志集合,例如logs_devlogs_debug

通常,拥有大量集合不会导致明显的性能损失,并且会带来良好的性能。非重复处理批处理重要。

使用具有大量集合的模型时,请考虑以下行为:

  • 每个集合都有几千字节的最小开销。

  • 未编制索引的读取操作可能会消耗大量内存。

  • 对于每个 数据库,都有一个命名空间文件(例如<database>.ns )存储该数据库的所有元数据。每个索引和集合在命名空间文件中都有自己的条目。有关具体限制,请参阅命名空间长度限制。

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

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

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

后退

嵌入式数据

获得技能徽章

免费掌握“关系到文档模型”!

了解详情

在此页面上