MongoDB聚合操作 (group, aggregate, mapReduce操作)

#MongoDb 聚合方法 group aggrate mapreduce#
1. Group (不支持分片,分布计算)
    * 语法结构
    <pre>
     db.collection.group({
        key:{category:1}, // 根据category来分类
        cond:{shop_price:{$gt:20}}, // 附加条件商品借个大于20的商品
        reduce:function(curr, result){ // curr 标识一行记录, result自定义变量,
        },
        initial:{total:0}, // 初始化变量,此处定义的变量可以在reduce方法中获取,result.total
        finalize:function(result){ // 最后分组后,得到一个result,再对result进行处理
        }
    });
    </pre>

    * 处理max
    <pre>
        db.collection.group({
            key:{category:1}, # 根据category来分类
            cond:{}, # 附加条件商品借个大于20的商品
            reduce:function(curr, result){ # curr 标识一行记录, result自定义变量,
                if(curr > result.total)
                    $result.total = curr.shop_price;
            },
            initial:{total:0}, # 初始化变量,此处定义的变量可以在reduce方法中获取,result.total
            finalize:function(result){ # 最后分组后,得到一个result,再对result进行处理
            }
        });
    </pre>
    * 处理avg
    <pre>
        db.collection.group({
                key:{category:1}, # 根据category来分类
                cond:{shop_price:{$gt:20}}, # 附加条件商品借个大于20的商品
                reduce:function(curr, result){ # curr 标识一行记录, result自定义变量,
                    result.count += 1;
                    result.total += parseFloat(curr.shop_price);
                },
                initial:{total:0,count:0,avg:0}, # 初始化变量,此处定义的变量可以在reduce方法中获取,result.total
                finalize:function(result){ # 最后分组后,得到一个result,再对result进行处理
                    result.avg = result.total / result.count;
                }
            });
    </pre>
2.  aggregate
    * 语法结构
        <pre>
        db.collection.aggregate([
            {},
            {},
            ....,
        ]);
        </pre>
    * $group 类似sql中的select. 根据商品的cat_id、颜色分类, 然后求出分类的商品的库存量
        <pre>
            [
                {$group:{ _id:{cat_id:"$cat_id", color:"$color"}, total:{$sum:"$goods_number"}}}
            ]
        </pre>
    * $project 类似sql中的select ,取出商品表的cat_id,goods_name,不去出_id字段
        <pre>
        [
            {$project:{_id:0, cat_id:1, goods_name:1}}
        ]
        </pre>
    * $match 匹配条件 取出商品的分类id为3或者价格大于200元的商品
        <pre>
        [
            {$math:{$or:[{cat_id:3}, {price:{$gt:200}}]}}
        ]
        </pre>
    * $unwind 分割字段,(字段必须是数组,否则报错)
        <pre>
        Data Model: shoes
        {_id:1, feature:["man", "big", "black", "cheap"]}
        Command:
        db.shoes.aggregate([
            {$unwind:"$feature"}
        ])
        Output:
        {_id:1,feature:"man"}
        {_id:1,feature:"big"}
        {_id:1,feature:"black"}
        {_id:1,feature:"cheap"}
        </pre>
    * $redact [编辑条件](http://docs.mongodb.org/manual/reference/operator/aggregation/redact/#pipe._S_redact)
    * $limit 限制条件 只取30条记录
        <pre>
        [
            {$limit: 30}
        ]
        </pre>
    * $sort 排序 根据商品库存正序,1/正序 -1/倒序
        <pre>
        [
            {$sort:{goods_number:1,}}
        ]
        </pre>
    * $geoNear [距离计算](http://docs.mongodb.org/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear)
    * $skip 跳过行 跳过20行
        <pre>
        [
            {$skip: 20}
        ]
        </pre>
    * $out 将匹配的结果输出到另外一个集合中, 将价格大于3000的商品取出 cat_id,goods_name,goods_number字段,不去出_id字段,然后按照商品的cat_id,color分类,结果跳过一行,只取30杭记录,把结果push到result集合中
        <pre>
        [
            {$math:{goods_price:{$gte:3000}}},
            {$project:{cat_id:1,goods_name:1, goods_number:1, _id:0}},
            {$group:{_id:{cat_id:"$cat_id", color:"$color"}, total:{$sum:"$goods_number"}}},
            {$skip:1},
            {$limit:30},
            {$out:"result"}
        ]
        </pre>

3. mapReduce方法
    * 语法结构
        <pre>
            db.collection.mapReduce(
                function(){
                    emit(this.cat_id, this.goods_number);
                }, // map方法
                function(key,value){
                    return Array.sum(value);
                }, // reduce方法
                {
                    query:{goods_id:{$gt:30}},
                    out:"mapReduceResultSet"
                }
            );
        </pre>
    * [more information](http://docs.mongodb.org/manual/core/map-reduce/)
时间: 2024-10-18 15:11:13

MongoDB聚合操作 (group, aggregate, mapReduce操作)的相关文章

MongoDB 聚合管道(aggregate)

1.聚合函数 查询总数 .count() > db.userinfo.count() 3 > db.userinfo.find() { "_id" : 1, "name" : "郭大爷", "sex" : "男", "age" : "80" } { "_id" : 2, "name" : "郭老师"

Mongodb聚合操作之读书笔记

Mongodb聚合操作 读书笔记 mongodb,两种计算聚合pipeline和mapreduce pipeline查询速度快于mapreduce,但MapReduce能够在多台Server上并行执行复杂的聚合逻辑. mongodb不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么mongodb直接停止操作,并向客户端输出错误消息. Pipeline方式使用db.collection.aggregate()函数进行聚合运算,运算速度较快,操作简单.

MongoDB 聚合操作(转)

在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复杂的聚合逻辑.MongoDB不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么MongoDB直接停止操作,并向客户端输出错误消息. 一,使用 Pipeline 方式计算聚合 Pipeline 方式使用db.collection.aggregate()函

那位帮忙提供一个java mongodb多个collection进行mapreduce的操作。

原文:那位帮忙提供一个java mongodb多个collection进行mapreduce的操作. 代码下载地址:http://www.zuidaima.com/share/1550463227890688.htm 我想统计下每个月某个视频的播放量,需要跨日表去mapreduce. 那位帮忙提供一个java mongodb多个collection进行mapreduce的操作.,布布扣,bubuko.com

使用MongoVUE对MongoDB 进行MapReduce操作步骤

Step 1 Open MongoVUE and connect to the server that contains the collection "cities" Step 2 Right-click on "cities" collection under "Database Explorer", and select "MapReduce". This will launch the MapReduce view.

8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

【转载】8天学通MongoDB——第三天 细说高级操作

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点

mongodb MongoDB 聚合 group

MongoDB 聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*). 基本语法为:db.collection.aggregate( [ <stage1>, <stage2>, ... ] ) 现在在mycol集合中有以下数据: { "_id" : 1, "name" : "tom", "sex" :

Mongodb学习总结-3(细说高级操作)

今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样. <2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图. <3> group 在mongodb里面做group操作有点