用了这么长时间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]
首先要定义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]