今天延續昨天的主題,來介紹$lookup
進階的用法,在做join的同時,使用pipeline整理、計算資料。
假設現在我們有顧客(customer)的基本資料
以及他們各自的購買紀錄(order)
如果想要計算2022上半年每位顧客的消費總額,我們可以下這樣的指令
其中在pipeline裡面的計算,寫法和之前寫的aggregate pipeline幾乎一模一樣,也是在陣列內寫入一連串的指令,搜尋、整理計算資料,再傳給下一個pipeline運行。
比較需要注意的地方是,pipeline第一個一定要寫$match
取選擇要join資料的選擇條件,以及$match
裡面一定要再用$expr
這個操作符,來寫條件判斷,裡面可以用$and
加入多個條件判斷。
此外在$expr
語法上得寫法和之前寫的不太一樣,如果還是用以前的寫法,會無法正確跑出想要的結果。
更詳細的說明,請參考$lookup的官方文件說明
最後我們可以得到aggregate pipeline運算的結果是