1. 程式人生 > >MongoDb 關聯查詢

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,表示指定顯示哪些欄位。

最終匯出的資料如下圖: