Appearance
MongoDB 关系
关系类型
MongoDB 是文档型数据库,没有外键约束,但可以通过嵌入或引用表达实体间关系。
1. 一对一 / 一对多:嵌入
将子文档直接嵌在父文档中,适合“子”总随“父”一起读写、数量有限的场景:
javascript
{
_id: 1,
name: "张三",
address: {
city: "北京",
street: "朝阳路 100 号"
}
}一对多示例(评论列表):
javascript
{
_id: 1,
title: "文章标题",
comments: [
{ author: "李四", text: "评论1" },
{ author: "王五", text: "评论2" }
]
}优点:一次查询拿到完整数据。缺点:文档变大、数组无限增长时需控制。
2. 多对一 / 多对多:引用
在文档中只存对方文档的 _id,通过应用层或 $lookup 再查:
javascript
// 订单集合
{ _id: 1, userId: ObjectId("..."), amount: 100 }
// 用户集合
{ _id: ObjectId("..."), name: "张三" }适合多对多、或“子”独立访问、更新频繁的场景。
3. 使用 $lookup 做“连接”
聚合阶段 $lookup 可根据引用字段从另一集合拉取数据,类似 SQL 的 JOIN:
javascript
db.orders.aggregate([
{ $lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "userInfo"
}}
])选择嵌入还是引用需根据查询模式、更新频率与文档大小权衡。下一节介绍 MongoDB 数据库引用。