首页 > 代码库 > mongodb学习3---mongo的MapReduce
mongodb学习3---mongo的MapReduce
1,概述
MapReduce是个非常灵活和强大的数据聚合工具。它的好处是可以把一个聚合任务分解为多个小的任务,分配到多服务器上并行处理。MongoDB也提供了MapReduce,当然查询语肯定是JavaScript。
MongoDB中的MapReduce相当于关系数据库中的group by。使用MapReduce要实现两个函数Map和Reduce函数。Map函数调用emit(key,value),遍历Collection中所有的记录,将key与value传递给Reduce函数进行处理。
2,基本语法
db.runCommand({mapreduce:<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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。