MongoDB中文手冊|官方文檔中文版 https://docs.mongoing.com/
聚合操作處理資料記錄和 return 計算結果。聚合操作将來自多個文檔的值組合在一起,并且可以對分組資料執行各種操作以傳回單個結果。
MongoDB 提供了三種執行聚合的方法:聚合管道,map-reduce function和單一目的聚合方法。
管道使用MongoDB中的原生操作提供有效的資料聚合,并且是MongoDB中資料聚合的首選方法。
一、聚合管道
MongoDB 的Aggregation framework是以資料處理管道的概念為藍本的。文檔進入多階段管道,将文檔轉換為聚合結果。
聚合(aggregate)主要用于計算資料,類似sql中的sum()、avg()
文法:db.集合名稱.aggregate([{管道:{表達式}}])
管道在MongoDB中一般用于将目前指令的輸出結果作為下一個指令的輸入
常用管道
1、$group:将集合中的文檔分組,可用于統計結果
2、$match:過濾資料,隻輸出符合條件的文檔
3、$project:修改輸入文檔的結構,如重命名、增加、删除字段、建立計算結果
4、$sort:将輸入文檔排序後輸出
5、$limit:限制聚合管道傳回的文檔數
6、$skip:跳過指定數量的文檔,并傳回餘下的文檔
7、$unwind:将數組類型的字段進行拆分
表達式:處理輸入文檔并輸出
文法:表達式:'$列名'
常用表達式
1、$sum:計算總和,$sum:1同count表示計數
2、$avg:計算平均值
3、$min:擷取最小值
4、$max:擷取最大值
5、$push:在結果文檔中插入值到一個數組中
6、$first:根據資源文檔的排序擷取第一個文檔資料
7、$last:根據資源文檔的排序擷取最後一個文檔資料
$group
将集合中的文檔分組,可用于統計結果,
_id表示分組的依據,使用某個字段的格式為'$字段'
例如:統計訂單表中每天訂單的數量:
Group by null
将集合中所有文檔分為一組
求訂單總數
透視資料
統計detail10集合中,直播和視訊的标題
結果:
$match
用于過濾資料,隻輸出符合條件的文檔
使用MongoDB的标準查詢操作
例如,查詢name為央視新聞,日期為2020-10-08的記錄中每個tag值對應的記錄數量
$project
修改輸入文檔的結構,如重命名、增加、删除字段、建立計算結果
$sort
将輸入文檔排序後輸出
查詢tag對應記錄數量,按統計數量升序
結果:
$limit
限制聚合管道傳回的文檔數,
例如傳回上面傳回結果2條記錄:
$unwind
文法1
将文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值
構造資料:
文法2:
對某字段值進行拆分,
處理空數組、非數組、無字段、null情況
使用文法1查詢
檢視查詢結果,發現對于空數組、無字段、null的文檔,都被丢棄了
如何能不丢棄呢?使用文法2