MapReduce有两种写法,也可以说mongodb所有的命令行都有两种写法。

但突然间发现MapReduce不同的写法会有不同的结果,接下来我们一起来看:

第一种:直接使用扩展属性。

1)emit函数的第2参数直接使用数值。

> db.entities.mapReduce(function(){emit(this.age,)},function(key,value){var tot
al=;for(var i in value){total+=value[i];} return total;},{query:{age:{"$gt":}
},out:{inline:}})
{
"results" : [
{
"_id" : ,
"value" :
},
{
"_id" : ,
"value" :
}
],
"timeMillis" : ,
"counts" : {
"input" : ,
"emit" : ,
"reduce" : ,
"output" :
},
"ok" : ,
}

看到results.value是正常值,方法可行。

2)emit函数的第2参数使用object对象。

> db.entities.mapReduce(function(){emit(this.age,{count:})},function(key,value)
{var total=;for(var i in value){total+=value[i].count;} return total;},{query:{
age:{"$gt":}},out:{inline:}})
{
"results" : [
{
"_id" : ,
"value" : NaN
},
{
"_id" : ,
"value" : NaN
}
],
"timeMillis" : ,
"counts" : {
"input" : ,
"emit" : ,
"reduce" : ,
"output" :
},
"ok" : ,
}

看到results.value是Nan,证明此方法不可行。

第二种方法:使用内置命令函数runCommand。

1)emit函数的第2参数直接使用数值。

> db.runCommand({mapReduce:"entities",map:function(){emit(this.age,)},reduce:fu
nction(key,value){var total=;for(var i in value){total+=value[i];} return {coun
t:total,key:key};},query:{age:{$gt:}},out:{inline:}})
{
"results" : [
{
"_id" : ,
"value" : {
"count" : "0[object Object]11",
"key" :
}
},
{
"_id" : ,
"value" : {
"count" : "0[object Object]111111111111111111111
",
"key" :
}
}
],
"timeMillis" : ,
"counts" : {
"input" : ,
"emit" : ,
"reduce" : ,
"output" :
},
"ok" :
}

看到results.value是竟然是这样的,证明此方法不可行。

2)emit函数的第2参数使用object对象。

> db.runCommand({mapReduce:"entities",map:function(){emit(this.age,{count:})},r
educe:function(key,value){var total=;for(var i in value){total+=value[i].count;
} return {count:total,key:key};},query:{age:{$gt:}},out:{inline:}})
{
"results" : [
{
"_id" : ,
"value" : {
"count" : ,
"key" :
}
}
],
"timeMillis" : ,
"counts" : {
"input" : ,
"emit" : ,
"reduce" : ,
"output" :
},
"ok" :
}

看到results.value是正常值,方法可行。

为什么会这样?原因以后再补上。

结论:

1、使用扩展函数db.xx.mapreduce时,emit函数的第2参数必须是使用数值。

2,使用内置命令函数db.runCommand时,emit函数的第2参数必须object对象。程序内部运行就是使用此方法。

MongoDB中MapReduce不同的写法,不同的结果的更多相关文章

  1. MongoDB中mapReduce的使用

    MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...

  2. MongoDB中MapReduce介绍与使用

    一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ...

  3. 【转载】MongoDB中的MapReduce 高级操作介绍

    转载自残缺的孤独 1.概述 MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,va ...

  4. MongoDB中的MapReduce介绍与使用

    一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ...

  5. MongoDB中通过MapReduce实现合计Sum功能及返回格式不一致问题分析

    建立下述测试数据,通过MapReduce统计每个班级学生数及成绩和. 代码如下: public string SumStudentScore() { var collection = _dataBas ...

  6. MongoDB中聚合工具Aggregate等的介绍与使用

    Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直接使用MongoDB原生的命令操作数据库中的数据,并且按照要求进行聚合 ...

  7. 在MongoDB的MapReduce上踩过的坑

    太久没动这里,目前人生处于一个新的开始.这次博客的内容很久前就想更新上来,但是一直没找到合适的时间点(哈哈,其实就是懒),主要内容集中在使用Mongodb时的一些隐蔽的MapReduce问题: 1.R ...

  8. MongoDB进行MapReduce的数据类型

    有很长一段时间没更新博客了,因为最近都比较忙,今天算是有点空闲吧.本文主要是介绍MapReduce在MongoDB上的使用,它与sql的分组.聚集类似,也是先map分组,再用reduce统计,最后还可 ...

  9. 浅析mongodb中group分组

    这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...

随机推荐

  1. Java HashMap详细介绍和使用示例

    ①对HashMap的整体认识 HashMap是一个散列表,它存储的内容是键值对(key-value)映射. HashMap继承于AbstractMap,实现了Map.Cloneable.java.io ...

  2. $ MySQL-python数据库模块用法

    本文主要介绍在python中如何使用MySQL数据库. 准备工作 安装mysql Linux (Ubuntu) apt-get install mysql-server 安装完成之后在命令行中输入:m ...

  3. java之继承中的构造方法

    继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...

  4. iframe的应用量还是这么大

    以前查阅资料说iframe已经过时,不建议使用,可是在先进的2018年,你去随便打开一个网站,扔都可以见到iframe的身影,这不禁要发问:iframe的应用量为什么还是这么大? HTML5不再支持使 ...

  5. Java:延迟功能的Robot在Lunix系统上会报错

    Java:延迟功能的Robot在Lunix系统上会报错 关于延迟功能的Robot: 今天开发过程中发现,本机开发好的项目,部署到Lunix服务器竟然报错!查了代码发现: Robot r = new R ...

  6. Spring事务管理之几种方式实现事务

    1.事务认识 大家所了解的事务Transaction,它是一些列严密操作动作,要么都操作完成,要么都回滚撤销.Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Spring ...

  7. Springboot--配置文件注解

    使用注解1 1.resouse中新建application.proprities jdbc.username=root jdbc.password=123 jdbc.driverClassName=f ...

  8. Juniper SRX 简单命令二

    --------------------------Juniper SRX 用户管理--------------------------- Juniper的命令,其实是比较形象的,英文稍微好一点,基本 ...

  9. 【论文解析】MTCNN论文要点翻译

    目录 0.论文连接 1.前言 2.论文Abstract翻译 3.论文的主要贡献 4.4 训练 5 模型性能分析 5.1 关于在线挖掘困难样本的性能 5.2 将人脸检测与对齐联合的性能 5.3 人脸检测 ...

  10. [小问题笔记(六)] 解决JS已执行,输出内容乱码问题. 顺带总结编码相关知识

    问题: JS输出的内容出现了乱码.如图: 分析:既然年和月的数字可以正常显示,证明js加载和执行都没有问题 解决:把js引用处的编码方式改成当前页面编码一致.charset="gb2312& ...