请通过浏览器功能收藏网页

MongoDB中的MapReduce测试用例 mongodb

发布时间:2018-09-10 11:17:59  作者:本站编辑  来源:本站原创  浏览次数:
我有话说 | 分享 |
www.javainfo.com.cn 上干货 欢迎收藏

在MongoDB的聚合框架中,还可以使用MapReduce,它非常强大和灵活,但具有一定的复杂性,专门用于实现一些复杂的聚合功能。

采用Jst来作为查询语言,因此能表达任意的逻辑,但是它运行非常慢,不应该用在实时的数据分析中


MapReduce的HelloWorld

实现的功能,找出集合中所有的键,并统计每个键出现的次数。

1:Map函数使用emit函数来返回要处理的值,示例如下:  参数对应关系如下面的颜色匹配情况

var map = function(){

for(var key in this){   this表示对当前文档的引用。

emit(key,{count:1});  emit 函数是固定的, 按照 key分组计数

}

}

2:reduce函数需要处理Map阶段或者是前一个reduce的数据,因此reduce返回的文档必须要能作为reduce的第二个参数的一个元素,示例如下:

var reduce = function(key,emits){

var total = 0;

for(var i in emits){

total += emits[i].count;

}

return {"count":total};

};

3:运行MapReduce,示例如下:

var mr = db.runCommand({"mapreduce":"scores","map":map,"reduce":reduce,"out":"myout"});

4:查询最终的结果,示例如下:

db.mrout.find();

如统计userId中值,以及每个值出现的次数,就可以如下操作

1:修改map函数,示例如下:

var map = function(){

emit(this.userId,{count:1});  文档的属性 可用直接采用 this调用

};

2:reduce函数不用改

3:重新执行

db.runCommand({"mapreduce":"scores","map":map,"reduce":reduce,"out":"myout"});

4:查看最终结果:

db.mrout.find();

    更多MapReduce可选的键

1:finalize:function :可以将reduce的结果发送到finalize,这是整个处理的最后一步

2:keeptemp:boolean :是否在连接关闭的时候,保存临时结果集合

3:query:document :在发送给map前对文档进行过滤

4:sort:document :在发送给map前对文档进行排序

5:limit:integer :发往map函数的文档数量上限

6:scope:document :可以在javascript中使用的变量

7:verbose:boolean :是否记录详细的服务器日志

示例:

var query = {"userId":{"$gt":"u2"}}

var sort = {"userId":1};

var finalize = function(key,value){

return {"mykey":key,"myV":value};

};

var mr = db.runCommand({"mapreduce":"users","map":map,"reduce":reduce,"out":"mrout","query":query,"sort":sort,"limit":2,"finalize":finalize});


如有疑问 请留言 欢迎提供建议
  • 0

    开心

  • 0

    板砖

  • 0

    感动

  • 0

    有用

  • 0

    疑问

  • 0

    难过

  • 0

    无聊

  • 0

    震惊

评论已有 0