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. windows下Qt5.4.2 for android开发环境配置

    安装包链接: http://yunpan.cn/cFs5tikVA83hK 访问密码 d029   本人所有的软件都安装在D:/Qt   1. 安装 Qt 5.4.2      不在讲述 2, 安装p ...

  2. linux内核动态打印

    参考:https://www.cnblogs.com/pengdonglin137/p/4622460.html https://linux.cn/article-3682-1.html?pr 如何打 ...

  3. [pixhawk笔记]5-uORB消息传递

    本文主要内容翻译自官方文档:https://dev.px4.io/en/middleware/uorb.html 在前一篇笔记中使用uORB完成消息传递,实现了一个简单示例程序,本文将对uORB进行系 ...

  4. 学Git,用Git ③

    不知道我前面是否将git讲清楚了,这里再稍微总结一下git的一个重要功能用法,同时增加两个很实用的git使用技巧. 1.git"读档"与git"回退" 我发现我 ...

  5. Spring mvc异步处理

    基于Servlet3.0的异步处理,springmvc的异步处理 控制器返回callable, spring mvc异步处理,将callable提交到TaskExecutor  使用一个隔离线程进行执 ...

  6. 【bzoj2333 & luoguP3273】棘手的操作(线段树合并)

    题目传送门:bzoj2333 luoguP3273 这操作还真“棘手”..听说这题是可并堆题?然而我不会可并堆.于是我就写了线段数合并,然后调了一晚上,数据结构毁一生!!!QAQ…… 其实这题也可以把 ...

  7. sql 取前一年、月

    SQL SERVER 提供了一些时间函数:取当前时间:SELECT GETDATE() 取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SE ...

  8. HDU5324 cqd分治

    HDU5324 cqd分治 标签(空格分隔): 未分类 给你两个长度相同数列,求第一个不上升,第二个不下降的最长子序列长度. 这里要求的子序列对第一个和第二个来说是相同的.即如果你在第一个序列里选了第 ...

  9. gcc,gdb,make学习

    实例学习gcc+gdb+make程序编译.链接.运行时头文件或动态链接库的查找 分四步: 预处理.编译.汇编.链接4steps:preprocess,compile,assemble,link ​

  10. hand first python 选读(2)

    文件读取与异常 文件读取与判断 os模块是调用来处理文件的. 先从最原始的读取txt文件开始吧! 新建一个aaa.txt文档,键入如下英文名篇: Li Lei:"Hello,Han Meim ...