📅  最后修改于: 2023-12-03 14:52:26.941000             🧑  作者: Mango
在 MongoDB 中,获取另一个表的数据可以使用数据库引用方式,具体步骤如下:
在 MongoDB 中新建一个数据库,例如 test
,并在其中新建两个集合: users
和 orders
,并分别插入数据。
use test
db.users.insertMany([
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 }
])
db.orders.insertMany([
{ user_id: ObjectId("60ed83312262d30c930fbed7"), product: "Toy Car", price: 20 },
{ user_id: ObjectId("60ed83312262d30c930fbed7"), product: "Doll", price: 15 },
{ user_id: ObjectId("60ed834f2b5a5b5f81b5fa5f"), product: "Football", price: 25 }
])
在 orders
集合中,user_id
字段使用的是 ObjectId
类型,表示此订单的用户是 users
集合中的哪个文档。
在 orders
集合中,user_id
字段可以用来引用 users
集合中的文档。要创建引用,可以使用 $lookup
操作符,在查询 orders
集合的同时查询 users
集合。
db.orders.aggregate([
{
$lookup:{
from:"users",
localField:"user_id",
foreignField:"_id",
as:"user"
}
}
])
输出结果如下:
{
"_id" : ObjectId("60ed84022b5a5b5f81b5fa62"),
"user_id" : ObjectId("60ed83312262d30c930fbed7"),
"product" : "Toy Car",
"price" : 20,
"user" : [
{
"_id" : ObjectId("60ed83312262d30c930fbed7"),
"name" : "Alice",
"age" : 25
}
]
}
{
"_id" : ObjectId("60ed84022b5a5b5f81b5fa63"),
"user_id" : ObjectId("60ed83312262d30c930fbed7"),
"product" : "Doll",
"price" : 15,
"user" : [
{
"_id" : ObjectId("60ed83312262d30c930fbed7"),
"name" : "Alice",
"age" : 25
}
]
}
{
"_id" : ObjectId("60ed84022b5a5b5f81b5fa64"),
"user_id" : ObjectId("60ed834f2b5a5b5f81b5fa5f"),
"product" : "Football",
"price" : 25,
"user" : [
{
"_id" : ObjectId("60ed834f2b5a5b5f81b5fa5f"),
"name" : "Bob",
"age" : 30
}
]
}
在查询 orders
集合时,使用的是 $lookup
操作符,这个操作符会从 users
集合中查询出与 orders
集合匹配的文档,并将相关数据作为 user
字段的值返回。
在 $lookup
操作符中,from
属性指定要查询的集合名称,localField
属性指定对应的外键字段名,foreignField
属性指定对应的主键字段名,as
属性指定查询结果的别名。
这样就实现了从一个集合中获取另一个集合的数据。通过创建引用,我们可以在查询 orders
集合时,同时查询 users
集合,并将相关数据返回。