若 product 資料表中有一份資料內容如下,平均價格經計算後為 198.333333。
[
{ price: 100 },
{ price: 270 },
{ price: 200 },
{ price: 300 },
{ price: 210 },
{ price: 110 }
]
若想要查詢低於平均價格的資料需要使用 aggregation,作法如下。
Stage 1:$group
階段一很簡單,就是將全部資料群組後計算 price 的平均值。
Stage 2:$lookup
階段二比較複雜,需要使用 $lookup 指令,目的是回頭查詢 product 資料表中 price 低於平均值的資料,所以第一個 from 參數要填 product 資料表名稱。接著在 let 參數中將上一階段的平均值存到一個變數裡面,這裡變數名稱為 avg_price,可以隨意命名。然後使用 pipeline 來查詢 product 中低於平均值(已放到 avg_price 變數中)的資料。這裡因為要使用到變數 avg_price,因此取值的時候要用 $$avg_price,並透過 $expr 才能讀取,如果寫成下面這樣是取不到變數值的,要特別注意。
❌
$match: {
price: {$lt: "$$avg_price"}
}