Mongodb mapreduce基本语法之神奇计数问题 发布日期:2016-07-20 15:46:54     博主推荐★

不知道大家有没有遇到过,使用mapreduce其中需要计数记录数的时候,我们在reduce中使用 number = number + 1 发现统计的出来的数量往往小于我们希望的结果。在此小编也遇到同样的问题,那么mapreduce如何实现计数呢,首先我们看下mapreduce的基本语法:

 

db.runCommand(
 { mapreduce : 字符串,集合名,
   map : 函数,见下文
   reduce : 函数,见下文
   [, query : 文档,发往map函数前先给过渡文档]
   [, sort : 文档,发往map函数前先给文档排序]
   [, limit : 整数,发往map函数的文档数量上限]
   [, out : 字符串,统计结果保存的集合]
   [, keeptemp: 布尔值,链接关闭时临时结果集合是否保存]
   [, finalize : 函数,将reduce的结果送给这个函数,做最后的处理]
   [, scope : 文档,js代码中要用到的变量]
   [, jsMode : 布尔值,是否减少执行过程中BSON和JS的转换,默认true] 
   //注:false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce,
   //true时BSON-->js-->map-->reduce-->BSON
   [, verbose : 布尔值,是否产生更加详细的服务器日志,默认true]
 }
);


看到number了么,number在map中使用 1 作为它的固定的value


//map示例


$map = 'function(){
            var key = {
                advert_id     : this.advert_id,
                district_code : this.district_code
            };
            var values = {
                amount:        this.amount,
                number:        1,
                advertiser_id: this.advertiser_id
            };
            emit(key, values);
        }';


接下来在reduce中使用 values[i].number;来计数即可


//reduce示例


$reduce = 'function(key, values){
            var result = {amount:0, number:0, advertiser_id:0};

            for(var i in values) {
                result.advertiser_id  = values[i].advertiser_id;
                result.amount        += values[i].amount;
                result.number        += values[i].number;//注意:数量统计时,不是这里+1即可,需要通过
                                                             //values[i].number来赋值
            }
            return result;
        }';

$query    = null;


总结:使用MapReduce时,尽量只用到累加、累减、累乘等基本操作,不要去用++、push、delete等可能会产生风险的操作


博文地址:https://blog.ahamu.cn/blog/detail.html?id=15
   
推荐文章
  • 1
    sysbench
    2020/07/08
  • 2
    phper转java记录篇-spring boot
    2020/06/10
  • 3
    thinkphp5.0使用路由之后,post请求的
    2020/05/19
  • 4
    springboot单元测试aop失效
    2020/05/15
  • 5
    脑海中的JVM
    2020/05/12
  • 6
    IDEA搜索插件时显示search results
    2020/05/12
  • 7
    spring boot 配置加载源码查找
    2020/04/20
  • 8
    通过javap命令分析java汇编指令
    2020/04/16
  • 9
    IDEA小知识:查看JVM内存使用情况的步骤
    2020/04/16
  • 10
    springboot-加载自定义的properti
    2020/04/14
  • 11
    Jenkins执行shell脚本无法启动子进程解决
    2020/04/03
  • 12
    mac idea激活找专业的
    2020/04/02
  • 13
    Jenkins + DockerSwarm 实现弹
    2020/03/31
  • 14
    mac swarm学习过程
    2020/03/31
  • 15
    spring cloud
    2020/03/18
  • 16
    JAVA开发中遇到的问题记录002
    2020/03/12
  • 17
    JAVA开发中遇到的问题记录001
    2020/03/07
  • 18
    php -i查看信息
    2020/02/23
  • 19
    phpStorm中使用xdebug工具调试dock
    2019/12/09
  • 20
    讲的比较好的B+树执行原理的文章
    2019/12/09
最喜标签
NYOJ 面试 AJAX ping CentOS 灰度算法 YII2