通過前面幾章的學習,MongoDB的常規操作已經差不多了,今天主要講解MongoDB查詢中的聚合函式及管道應用示例,僅供學習分享使用,如有不足之處,還請指正,
聚合函式
聚合(aggregate)主要用于處理資料(諸如統計平均值,求和等),并回傳計算后的資料結果,
MongoDB中聚合的方法使用aggregate(),
語法:db.集合名.aggregate(AGGREGATE_OPERATION);
下表展示了一些聚合的運算式:

管道
MongoDB的聚合管道將MongoDB檔案在一個管道處理完畢后將結果傳遞給下一個管道處理,管道操作是可以重復的,
運算式:處理輸入檔案并輸出,運算式是無狀態的,只能用于計算當前聚合管道的檔案,不能處理其它的檔案,
聚合框架中常用的幾個操作:
- $project:修改輸入檔案的結構,可以用來重命名、增加或洗掉域,也可以用于創建計算結果以及嵌套檔案,
- $match:用于過濾資料,只輸出符合條件的檔案,$match使用MongoDB的標準查詢操作,
- $limit:用來限制MongoDB聚合管道回傳的檔案數,
- $skip:在聚合管道中跳過指定數量的檔案,并回傳余下的檔案,
- $unwind:將檔案中的某一個陣列型別欄位拆分成多條,每條包含陣列中的一個值,
- $group:將集合中的檔案分組,可用于統計結果,
- $sort:將輸入檔案排序后輸出,
- $geoNear:輸出接近某一地理位置的有序檔案,
聚合語法
聚合運算式語法,如下所示:
1 db.集合名.aggregate([ 2 { 3 管道:{聚合運算式} 4 } 5 ]);
注意:聚合函式套路:從外到里依次是小括號,中括號,大括號,
group,sort示例
示例1 :統計男生女生的平均年齡

示例2:統計男生女生的最大年齡,最小年齡,如下所示:

示例3:統計男生女生的人數,如下所示:

注意:$sum:1===count(*)
示例4:不分組求匯總,_id:null 就表示不分組,

示例5:求每一個系的人數,并升序排列,如下所示:

注意:各個管道之間是相互平級的,不能嵌套,
示例6:多個分組條件,查詢每一個系的男生,女生的人數,如下所示:

查詢集合檔案數量
如果只是按照某些條件查詢數量,不進行分組,則可以采用count函式,
語法:db.集合名稱.count();
查詢集合檔案數量,如下所示:
1 //查詢總檔案數量 2 db.student.count(); 3 //查詢男生數量 4 db.student.count({sex:"Male"});

match,skip示例
示例1:查詢年齡大于等于20,且只顯示前兩個,如下所示:

注意:管道的執行順序,是從上到下,如果順序改變,則執行結果會不同,
示例2:查詢2條資料,并跳過一條,如下所示:

示例3:先跳過一條,再查詢前兩條資料,如下所示:

示例4:統計男生的最大年齡,最小年齡,平均年齡

project示例
釋義:修改輸入檔案的結構,可以用來重命名、增加或洗掉域,也可以用于創建計算結果以及嵌套檔案,
示例1:查詢檔案中兩個屬性,如下所示:

備注
卜算子·我住長江頭
【作者】李之儀 【朝代】宋我住長江頭,君住長江尾,日日思君不見君,共飲長江水,
此水幾時休,此恨何時已,只愿君心似我心,定不負相思意,

作者:Alan.hsiang
出處:http://www.cnblogs.com/hsiang/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308612.html
標籤:其他
上一篇:MongoDB進階之查詢(一)
下一篇:MySQL45講之保證高可用
