mongo mapReduce 查询

db.getCollection('com.sup.pojo.Table').mapReduce(  
        function(){   //map
            emit(this.instanceId,this.rent);
        },  
        function(keys,values){ //redus
            var arr = new Array(values.length);
            print(values.length);
            var length2 = values.length;
            for(i=0;i<length2;i++ ){ 
                arr[i]=NumberInt(values[i]);
            }          
             return Array.sum(arr);
       
        },
        {
        	/*指定结果集以什么方式存储,可选参数包括:  
            replace:如果文档(table)存在,则替换table,  
            merge:如果文档中存在记录,则覆盖已存在的文档记录  
            reduce: 如果文档中存在相同key的记录了,则先计算两条记录,然后覆盖旧记录  
            {inline:1}  在内存中存储记录,不写入磁盘(用户数据量少的计算) */
            out:"rent_tatal",
 			//筛选条件
            query: { signingTime:  { $gt: "2019-01-01", $lt: "2019-01-31" }}
           
        }
   
    ).find();

map: function() {emit(this.cat_id,this.goods_number); }, // 函数内部要调用内置的emit函数,cat_id代表根据cat_id来进行分组,goods_number代表把文档中的goods_number字段映射到cat_id分组上的数据,其中this是指向向前的文档的,这里的第二个参数可以是一个对象,如果是一个对象的话,也是作为数组的元素压进数组里面;

reduce: function(cat_id,all_goods_number) {return Array.sum(all_goods_number)}, // cat_id代表着cat_id当前的这一组,all_goods_number代表当前这一组的goods_number集合,这部分返回的就是结果中的value值;

out: , // 输出到某一个集合中,注意本属性来还支持如果输出的集合如果已经存在了,那是替换,合并还是继续reduce? 另外还支持输出到其他db的分片中,具体用到时查阅文档,筛选出现的键名分别是_id和value;

query: , // 一个查询表达式,是先查询出来,再进行mapReduce的

sort: , // 发往map函数前先给文档排序

limit: , // 发往map函数的文档数量上限,该参数貌似不能用在分片模式下的mapreduce

finalize: function(key, reducedValue) {return modifiedObject; }, // 从reduce函数中接受的参数key与reducedValue,并且可以访问scope中设定的变量

scope: , // 指定一个全局变量,能应用于finalize和reduce函数

jsMode: , // 布尔值,是否减少执行过程中BSON和JS的转换,默认true,true时BSON–>js–>map–>reduce–>BSON,false时 BSON–>JS–>map–>BSON–>JS–>reduce–>BSON,可处理非常大的mapreduce。

verbose: // 是否产生更加详细的服务器日志,默认true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值