在MongoDB中,聚合管道查询可以通过$lookup
操作符来实现连接(join)操作。$lookup
允许你将来自另一个集合的文档与当前集合的文档进行连接。以下是一个简单的示例:
假设我们有两个集合:orders
和customers
。orders
集合包含订单信息,customers
集合包含客户信息。我们想要查询每个订单及其对应的客户信息。
orders集合:
{ "_id": 1, "customer_id": 1, "product": "Laptop", "price": 1000 }
customers集合:
{ "_id": 1, "name": "John Doe", "email": "john.doe@example.com" }
我们可以使用以下聚合管道查询来连接这两个集合:
db.orders.aggregate([ { $lookup: { from: "customers", localField: "customer_id", foreignField: "_id", as: "customer_info" } }, { $unwind: "$customer_info" }, { $project: { _id: 1, customer_id: 1, product: 1, price: 1, customer_name: "$customer_info.name", customer_email: "$customer_info.email" } } ])
这个查询的工作原理如下:
$lookup
操作符从customers
集合中查找与orders
集合中的customer_id
相匹配的文档,并将结果存储在名为customer_info
的新数组字段中。$unwind
操作符将customer_info
数组拆分为多个文档,每个文档包含一个客户信息。$project
操作符重新构造输出文档,将客户名称和电子邮件字段分别重命名为customer_name
和customer_email
。
查询结果:
{ "_id": 1, "customer_id": 1, "product": "Laptop", "price": 1000, "customer_name": "John Doe", "customer_email": "john.doe@example.com" }