聚合

聚合( Aggregation )爲集合文檔數據提供各類處理數據方法,並返回計算結果。MongoDB 提供了3 種方式來執行聚合命令:聚合管道方法、map-reduce 方法和單一目標聚合方法。php


1.聚合管道方法
聚合管道方法又能夠直接理解爲合計流水線法,就是把集合裏若干含數值型的文檔記錄,其鍵對應的值進行各類分類統計。該方法支持分片集合操做。ide

語法: db.collection_name.aggregate(
    [{$match: {<field>}},//統計查找條件
        {$group:{<fieldl >,< field2 >}}
        //fieldl 爲分類字段; field2 爲含各類統計操做符的數值型字段,如$sum、$avg、$min、$max、$push、$addToSet、$first、$last操做符
this

db.Sale_detail.aggregate(
    [
        {
            $match: {ok : false}  //查找條件,與find()的查找條件使用方法同樣
        },
        {
            $group: {
                _id: "$goodsid",
                total: {$sum: "$amount"}  //按goodsid分類統計amount字段的總數量
            }
        }
    ]
)

_id :"$goodsid" ,goodsid爲分類字段名,_id爲必須指定惟一性字段,不能改成其餘名稱的字段;total爲統計結果字段名,能夠是任意的符合起名規則的新名稱。$sum爲求和操做符號, $amount爲求和字段,必須加上雙引號。圖片


2. map-reduce方法ip

語法: db.collection_name. mapreduce(
                function() {emit( <this.field1>,<this.field2>)},
                function(key, value){return array.sum(values)},
                {query: {<field>} ,out:<"resultname">}文檔

命令說明:it

    function(){emit(<this.field1>, <this.field2>)},把集合對應的字段<field1><field2>進行map(影射)操做。io

    把自field1值和求得值連同out:<"resultname">一塊兒返回。ast

    query:{<field>}在集合裏查詢符合<field>條件的文檔。
    該方式進行聚合運算,效率較聚合管道方式要低,並且使用更復雜。function


3. 單一目標聚合方法
該方法下,目前有兩種聚合操做功能:db.collection_name.count()和db.collection_name.distinct()。
(1)語法:db.collection_name.count(query, options)
命令說明:統計集合裏符合查詢條件的文檔數量, query 爲查詢條件, option 參數詳細說明如表

圖片.png


統計符合條件的記錄數

db.Sale_detail.count({ok: false})


從第二條開始統計符合條件的記錄數

db.Sale_detail.count({ok: false}, {skip: 1})


統計指定鍵的不一樣值並返回不一樣值

db.Sale_detail.distinct("goodsid")


單一目標聚合方法,能夠直接在find()後加點使用。如goodsdb.Sale_detail.find({ok:false}).count()goodsdb.Sale_detail.find({ok:false}).count().skip(1)

相關文章
相關標籤/搜索