首页/数据/NoSQL 速查/文档建模:内嵌与引用取舍
选型与架构50 条

文档建模:内嵌与引用取舍

文档库建模的核心是"一次查询要拿到的数据放在一起":一对一与小规模一对多适合内嵌,无界增长与多对多适合引用;数组无序增长会带来重写与迁移成本。

NoSQL 速查数据更新于 2026-10-12
内嵌读取一次到位、原子更新限于单文档;适合量级可预期、随主体生命周期存在的数据
引用通过关联字段查询,需应用层 join 或 lookup;适合独立实体与多对多
单文档上限MongoDB 单文档 16MB,数组过大触发搬迁与写放大

示例

示例
// 内嵌:地址随用户生命周期存在,读用户即得
{ _id: 1, name: "ann", addresses: [ { city: "hz", zip: "310000" } ] }

// 引用:订单量无界,独立集合 + 外键字段
// orders: { _id: 1001, userId: 1, items: [ { sku: "a", qty: 2 } ] }
判断标准是查询模式与增长边界:读多写少、数量可控的内嵌;写多、数量无界、被多处引用的拆出去。

易错点

  • 内嵌数组持续追加会让文档变大并在磁盘上搬迁,写放大明显
  • 完全照抄关系模型(全部拆表)会失去文档库读取一次到位的优势,建模要看查询清单

数据来源与参考

  • MongoDB Manual: Data modeling
  • MongoDB Manual: Model one-to-many relationships
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌