当前位置:Gxlcms > 数据库问题 > mongodb学习3---mongo的MapReduce

mongodb学习3---mongo的MapReduce

时间:2021-07-01 10:21:17 帮助过:2人阅读

<collection>, map:<mapfunction>, reduce:<reducefunction>, [,query:<query filter object>] [,sort:<sorts the input objects using this key.Useful for optimization,like sorting by the emit key for fewer reduces>] [,limit:<number of objects to return from collection>] [,out:<see output options below>] [,keeptemp:<true|false>] [,finalize:<finalizefunction>] [,scope:<object where fields go into javascript global scope>] [,verbose:true] });

 


参数说明:
Mapreduce:要操作的目标集合
Map:映射函数(生成键值对序列,作为reduce函数参数)
Reduce:统计函数
Query:目标记录过滤
Sort:目标记录排序
Limit:限制目标记录数量
Out:统计结果存放集合(不指定使用临时集合,在客户端断开后自动删除)
Keeptemp:是否保留临时集合
Finalize:最终处理函数(对reduce返回结果进行最终整理后存入结果集合)
Scope:向map、reduce、finalize导入外部变量
Verbose:显示详细的时间统计信息。

 

3,应用实例
(1)查询active表,每个cid对应的次数。相当于以cid分组。

map=function (){
 emit(this.cid,{count:1})
}
reduce=function(key,values){
    var cnt=0;   
    values.forEach(function(val){ cnt+=val.count;});  
    return {"count":cnt};
}
db.active.mapReduce(map,reduce,{out:‘mr1‘})
(2)按cid和日期分组
map=function(){
 emit({cdi:this.cid,cd:this.cd},{count:1})
}
reduce=function(key,values){
    var cnt=0;   
    values.forEach(function(val){ cnt+=val.count;});  
    return {"count":cnt};
}
db.active.mapReduce(map,reduce,{out:‘mr2‘})
(3)每个cid的产品数量,总金额是多少
map=function(){
  emit(this.cid,{amount:this.price,count:1})
}
reduce=function (key,values){
    var res={amount:0,count:0}
    values.forEach(function(val){ 
        res.amount+=val.amount;
        res.count+=val.count
    });  
    return res;
}
db.test.mapReduce(map,reduce,{out:"mr3"})

我的总结:在mongodb中,map对集合分组。reduce对分组结果汇总。

mongodb学习3---mongo的MapReduce

标签:

人气教程排行