• 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对分组结果汇总。

  • 相关阅读:
    mysql主从延迟高的原因
    OpenStack云平台网络模式及其工作机制
    maps.reg
    dnion的remap.conf文件
    linux的tar命令
    traffic server文件目录
    records.config文件参数解释
    VNC配置
    KVM详情
    cache.config文件配置模板
  • 原文地址:https://www.cnblogs.com/zhangyabin---acm/p/5919540.html
Copyright © 2020-2023  润新知