天天看點

MongoDB中的Group By

為了回應使用者對簡單資料通路的需求,MongoDB推出了聚合架構(Aggregation Framework)。該架構使用聲明性管道符号來支援類似于SQL Group By操作的功能,而不再需要使用者編寫自定義的JavaScript例程。

大部分管道操作會在“aggregate”子句後會跟上“$match”打頭。它們用在一起,就類似于SQL的from和where子句,或是 MongoDB的find函數。“$project”子句看起來也非常類似SQL或MongoDB中的某個概念(和SQL不同的是,它位于表達式尾端)。

接下來介紹的操作在MongoDB聚合架構中是獨一無二的。與大多數關系資料庫不同,MongoDB天生就可以在行/文檔記憶體儲數組。盡管該特性對 于全有全無的資料通路十分便利,但是它對于需要組合投影、分組和過濾操作來編寫報告的工作,卻顯得相當複雜。“$unwind”子句将數組分解為單個的元 素,并與文檔的其餘部分一同傳回。

“$group”操作與SQL的Group By子句用途相同,但是使用起來卻更像是LINQ中的分組運算符。與取回一行平面資料不同,“$group”操作的結果集會呈現為一個持續的嵌套結構。正 因如此,使用“$group”可以傳回聚合資訊,例如對于每個分組中的實際文檔,計算文檔整體或部分的數目和平均值。

chaunceyhao