美文网首页
mongodb3 聚合之MapReduce

mongodb3 聚合之MapReduce

作者: dolphin叔叔 | 来源:发表于2016-03-23 20:11 被阅读0次

    mongodb3的MapReduce命令

    db.集合名称.mapReduce(
        mapFunction,                        //必须
        reduceFunction,                    //必须
        {
          out:"",          `字符串 输出结果保存到集合`
          query:{},        `文档 map函数前的查询过滤`
          sort:{},         `文档 map函数前的排序,其作用是,如果我们在
                            map之前对key做排序,那么在reduce的过程中,
                            相同key会在一起,这样可以减少reduce的次数`
          limit:3,         `整数 map函数输入的最大上限`
          finalize:,       `方法,reduce得到的结果输入此方法`
          scope:{},        `文档 存放全局变量 map reduce finalize方法都能使用`
          jsMode:true      `是否减少执行过程中BSON和JS的转换 false可以处理大数据mapreduce`
          verbose:true     `是否产生更加详细的服务器日志`
       }   
    )
    

    如此庞大的命令,看似吓人。其实只有mapFunction和reduceFunction是必须,
    简化命令

    db.集合名称.mapReduce(map,reduce,{})
    

    mongodb3 循序渐进写MapReduce程序

    appuser 集合 具有如下文档
    {name:"人间四月",age:20,"locate":" 北京"}
    {name:"dolphin",age:22,"locate":" 北京"}
    {name:"yunsheng",age:21,"locate":" 天津"}
    {name:"shark",age:23,"locate":" 天津"}
    {name:"babywang",age:25,"locate":" 四川"}
    
    1. 查询各个地区用户年龄的平均值
     mapFunction=function(){
            emit(this.locate,this); 
     };
    reduce=function(key,emits){
           var locate = key;
           var total=0;
           for(var i=0;i<emits.length;i++){
              total=total+emits[i].age;
           }
          var v = total/emits.length;
          return {"locate":locate,"v":v};
    };
    db.appuser.mapReduce(map,reduce,{out:"mr-result"});
    

    上面程序的说明:
    map函数的作用,其实是一个分组映射的过程。函数中 this 指当前正在操作的文档。emit(key,value)的作用是将文档按照key分组,value输入给reduce的数据。emit(this.locate,this)的作用便是按照文档的地区分组,并且将整个文档输入给reduce函数。

    reduce函数是相同key聚合在一起的过程。function(key,emits)的key就是分组映射的key,emits 是map函数输出的多个value。
    out:mr-result 代表reduce的输出结果,存入集合mr-reduce。查看mr-reduce集合,可以得到如下文档

    { 
        "_id" : " 北京", 
        "value" : {
            "locate" : " 北京", 
            "v" : 21.0
        }
    }{ 
        "_id" : " 四川", 
        "value" : {
            "_id" : ObjectId("56eac7d58a2558205629602c"), 
            "name" : "babywang", 
            "age" : 25.0, 
            "locate" : " 四川"
        }
    }{ 
        "_id" : " 天津", 
        "value" : {
            "locate" : " 天津", 
            "v" : 22.0
        }
    }
    

    待续

    相关文章

      网友评论

          本文标题:mongodb3 聚合之MapReduce

          本文链接:https://www.haomeiwen.com/subject/irtllttx.html