在MongoDB中,聚合管道查詢可以通過$lookup
操作符來實現(xiàn)連接(join)操作。$lookup
允許你將來自另一個集合的文檔與當(dāng)前集合的文檔進(jìn)行連接。以下是一個簡單的示例:
假設(shè)我們有兩個集合:orders
和customers
。orders
集合包含訂單信息,customers
集合包含客戶信息。我們想要查詢每個訂單及其對應(yīng)的客戶信息。
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
相匹配的文檔,并將結(jié)果存儲在名為customer_info
的新數(shù)組字段中。$unwind
操作符將customer_info
數(shù)組拆分為多個文檔,每個文檔包含一個客戶信息。$project
操作符重新構(gòu)造輸出文檔,將客戶名稱和電子郵件字段分別重命名為customer_name
和customer_email
。查詢結(jié)果:
{
"_id": 1,
"customer_id": 1,
"product": "Laptop",
"price": 1000,
"customer_name": "John Doe",
"customer_email": "john.doe@example.com"
}