被MongoDB用Aggregate暴打的後端小菜雞日記-day7-用$group將資料分組(上)

鰻魚燒
Sep 5, 2022

今天我們要介紹$group,它可以將資料進行分組,同時進行特定的運算,回傳運算後的結果。

Photo by Dan Cristian Pădureț on Unsplash

例如:現在有每位學生三次段考的成績,老師需要針對這些成績進行計算。

情境一:我們想找出每一次段考數學最高分,和英文最低分的分數。

最後會得到以下資料

在使用$group必須注意,回傳資料裡面的_id不會是原本的id值了,而是test這個欄位數值,以及原本的欄位資料,如果沒有特別用指令寫在新增的欄位裡面,基本上會在這一次的pipeline消失,不會往下傳給下一個aggregate pipeline。

情境二:我們想找出每一次段考數學第一、第二高分,可以使用$maxN取前面最高的幾筆資料。

最後回傳

ps.$maxN需要mongodb版本在5.2.以上才能使用。

情境三:計算每一次段考數學和英文的平均分數,可以使用$avg來計算欄位的平均值。

最後回傳 (ps.事實上我用mongodb跑過,可以算到小數第15位,只是被我省略)

情境四:計算每一次段考數學標準差。
標準差的算法,官方有提供兩種操作符,$stdDevSamp$stdDevPop,詳細差異請參考官方文件。

得到的結果,可以自己感受一下差異?

--

--

鰻魚燒

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