被MongoDB用Aggregate暴打的後端小菜雞日記-day10-$lookup將兩個collection的資料合併(下)

鰻魚燒
Sep 9, 2022

--

今天延續昨天的主題,來介紹$lookup進階的用法,在做join的同時,使用pipeline整理、計算資料。

Photo by Fikri Rasyid on Unsplash

假設現在我們有顧客(customer)的基本資料

以及他們各自的購買紀錄(order)

如果想要計算2022上半年每位顧客的消費總額,我們可以下這樣的指令

其中在pipeline裡面的計算,寫法和之前寫的aggregate pipeline幾乎一模一樣,也是在陣列內寫入一連串的指令,搜尋、整理計算資料,再傳給下一個pipeline運行。

比較需要注意的地方是,pipeline第一個一定要寫$match取選擇要join資料的選擇條件,以及$match裡面一定要再用$expr這個操作符,來寫條件判斷,裡面可以用$and加入多個條件判斷。

此外在$expr語法上得寫法和之前寫的不太一樣,如果還是用以前的寫法,會無法正確跑出想要的結果。

更詳細的說明,請參考$lookup的官方文件說明

最後我們可以得到aggregate pipeline運算的結果是

--

--

鰻魚燒

剛轉職成後端工程師的小菜雞,分享自己的學習筆記