MongoDb 關聯查詢
剛接觸MongoDB,有個需求是進行兩張表的關聯查詢的。
需求:把訂單表(PrepurchaseOrder)和使用者表(User)通過郵箱(emaiL)進行關聯,查詢訂單使用者對應的錢包地址。
訂單表結構如下:
{
"email" : "[email protected]",
"productName" : "中型2GPU礦機",
}
使用者表結構如下:
{
"email" : "[email protected]",
"neoWalletAddress" : "aabbccdd",
}
最終的sql如下:
db['PrepurchaseOrder'].aggregate([{
$lookup:{
from:"User",
localField:"email",
foreignField: "email",
as: "Users"
}},
{ $unwind: "$Users" },
{ $match : { "Users.neoWalletAddress" : {$exists:true} }},
{ $project: { productName: 1,count:1,email:1,"Users.neoWalletAddress":1}},
])
sql解析:
1.from:"User" 表示從User表中去查
2.localField:"email",表示訂單表(PrepurchaseOrder)中的郵箱。
3.foreignField: "email",表示使用者表(User)中的郵箱。
4.as: "Users",表示把從User表中查詢出的內容作為一個Users變數,附加到訂單表(PrepurchaseOrder)
5.{ $unwind: "$Users" },表示把從User表中查詢的資料欄位,作為訂單表(PrepurchaseOrder)中的欄位
6. $match,表示進行值的匹配,匹配User表中錢包地址不為null的。
7. $project,表示指定顯示哪些欄位。
最終匯出的資料如下圖: