mongodb $lookup 之后再$project_实记 | MongoDB 多表连接查询
时间: 2023-09-09 09:14:35 浏览: 207
MongoDB中多表关联查询($lookup)的深入讲解
在MongoDB中,$lookup操作符可以用于实现多表连接查询。它可以将两个集合中的文档进行关联,并返回一个新的文档,其中包含了两个集合中匹配的文档信息。而在进行$lookup操作之后,我们可以使用$project操作符来对查询结果进行进一步的处理,以选择需要显示的字段或者添加新的字段。
例如,假设我们有两个集合"orders"和"customers",它们的结构分别如下:
orders集合:
```
{
"_id": ObjectId("5f94e5c0d286db2d3ad3a71c"),
"order_id": 1,
"customer_id": ObjectId("5f94e5c0d286db2d3ad3a71a"),
"product": "computer",
"amount": 3
}
```
customers集合:
```
{
"_id": ObjectId("5f94e5c0d286db2d3ad3a71a"),
"name": "Tom",
"age": 25,
"address": "New York"
}
```
现在我们希望查询orders集合中的文档,并将其与customers集合中的文档进行关联,以获取订单对应的客户信息。我们可以使用以下的$lookup和$project操作来实现:
```
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "customer_id",
foreignField: "_id",
as: "customer_info"
}
},
{
$project: {
"order_id": 1,
"product": 1,
"amount": 1,
"customer_name": "$customer_info.name",
"customer_age": "$customer_info.age",
"customer_address": "$customer_info.address"
}
}
])
```
在上述代码中,$lookup操作符用于将orders集合中的"customer_id"字段与customers集合中的"_id"字段进行关联,并将匹配的文档信息存储在一个新的字段"customer_info"中。而$project操作符则用于对查询结果进行处理,选择需要显示的字段,并添加新的字段"customer_name"、"customer_age"和"customer_address"来显示客户的姓名、年龄和地址。
参考资料:
- MongoDB官方文档:$lookup
- MongoDB官方文档:$project
阅读全文