MongoDB 的强项之一,就是把相关信息直接放进同一份文档。
例如用户资料:
db.users.insertOne({
name: "陈一",
email: "chenyi@example.com",
address: {
city: "上海",
district: "浦东新区",
zipCode: "200120"
},
preferences: {
theme: "dark",
language: "zh-CN"
}
})这里的 address、preferences 都是嵌套文档。
还可以嵌套数组:
db.orders.insertOne({
orderNo: "ORD-20260328-001",
customerName: "陈一",
items: [
{ sku: "BOOK-001", name: "数据库设计", qty: 2, price: 88 },
{ sku: "PEN-002", name: "签字笔", qty: 3, price: 6 }
],
shipping: {
city: "上海",
contact: "陈一"
}
})这就像一份订单档案袋里,直接附带:
- 收货信息子档案
- 商品清单子档案
查询嵌套字段时,用点号路径:
db.users.find({ "address.city": "上海" })
db.orders.find({ "items.sku": "BOOK-001" })更新嵌套字段也一样:
db.users.updateOne(
{ name: "陈一" },
{ $set: { "preferences.language": "en-US" } }
)什么时候适合嵌套?
- 子信息天然依附父对象
- 经常一起读取
- 一起更新
- 数量不会无限膨胀
如果你把一个会无限增长的巨大列表硬塞进单文档,档案袋会越来越臃肿。
这就是后面会讲到的模式设计边界。