聚合

聚合( 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)

相关文章
相关标签/搜索