mongo之mapReduce

用了这么长时间mongo,才发现居然没有sum、max这样的函数,不过利用mapReduce自己实现也很简单。实现与hadoop的map/reduce很类似。

首先要定义map、reduce函数。进入mongo的shell输入
> var map = function() {
... emit(this.name, {score: this.dic});#设置score虚拟列,将每个collection的score设置为dic的值,用于reduce相加。
... };
> var reduce = function(key, values) {
... var sum = 0;
... for (var i=0;i<values.length;i++){
... sum+=values[i].score;#对每个name的所有score进行相加,得到sum结果。
... }
... return sum;
... };

然后就可以进行查询了:
>db.test3.mapReduce(map, reduce, {out: "test3_result2"});

结果就存贮在了test3_result2表中,可以通过
> db.test3_result2.find()

查询。

[color=brown]补充[/color]:

上次的mapreduce一直有问题,这次继续学习了一下,终于运行成功了
> map
function (){ emit(1, {"count" : this.num}); }
> reduce
function (key, emits){ total = 0; for(var i in emits){ total += [color=red]emits[i].count[/color]; } return {"count" : total}; }

另外,上面{out: "test3_result2"}会产生一个临时的表格,麻烦,可以将命令改为:

r = db.runCommand({"mapreduce" : "amazon_tmp_list", "map" : map, "reduce" : reduce,[color=red]"out":{inline:1}[/color]})

参考:
[url]http://blog.csdn.net/violet_day/article/details/21458617[/url]
[url]http://www.cnblogs.com/yuechaotian/archive/2013/02/21/2920254.html[/url]
[url]http://chenzhou123520.iteye.com/blog/1629777[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值