被MongoDB用Aggregate暴打的後端小菜雞日記-day13-$bucket 桶子分組

鰻魚燒
Sep 12, 2022

--

今天要來介紹aggregate比較進階的用法$bucket,這個操作符它的用法很類似$group,都是可以將資料透過特定欄位進行分組。

不同的地方在於$group會把欄位相同值的資料當成一組,但是$bucket可以指定特定範圍值的資料為一組。

Photo by Sixteen Miles Out on Unsplash

假設我們現在有學生的成績資料

老師想要按照數學成績幫學生分組,並且知道每一組的學生有幾人、名字是誰,我們可以用以下指令,將學生分成3組,1~40分、40~70分、70~100分。

其中boundaries可以決定分組的區間,按照[1, 40, 70, 101]的寫法,會是分成1≤math<4040≤math<7070≤math<101這三組,為了將100分的學生也包含在內,所以最後一個才寫101。

另外default可以讓數學不在1~100分這個範圍內的資料,或原本資料本身缺少math這個欄位,都會被歸類在other這一組。

若是使用boundaries: [0, 40, 70, 101]這種分法,原本資料本身缺少math這個欄位,會被歸類在0~40分這一組,應該是因為mongodb在判斷上,認為0、null、false都是falsy value的一種。

最後回傳的資料會是

ps.分組後的_id值會是分組值得下限值當id。

--

--

鰻魚燒

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