MongoDB中MapReduce不同的写法,不同的结果
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不同的写法,不同的结果的更多相关文章
- MongoDB中mapReduce的使用
MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...
- MongoDB中MapReduce介绍与使用
一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ...
- 【转载】MongoDB中的MapReduce 高级操作介绍
转载自残缺的孤独 1.概述 MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,va ...
- MongoDB中的MapReduce介绍与使用
一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ...
- MongoDB中通过MapReduce实现合计Sum功能及返回格式不一致问题分析
建立下述测试数据,通过MapReduce统计每个班级学生数及成绩和. 代码如下: public string SumStudentScore() { var collection = _dataBas ...
- MongoDB中聚合工具Aggregate等的介绍与使用
Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直接使用MongoDB原生的命令操作数据库中的数据,并且按照要求进行聚合 ...
- 在MongoDB的MapReduce上踩过的坑
太久没动这里,目前人生处于一个新的开始.这次博客的内容很久前就想更新上来,但是一直没找到合适的时间点(哈哈,其实就是懒),主要内容集中在使用Mongodb时的一些隐蔽的MapReduce问题: 1.R ...
- MongoDB进行MapReduce的数据类型
有很长一段时间没更新博客了,因为最近都比较忙,今天算是有点空闲吧.本文主要是介绍MapReduce在MongoDB上的使用,它与sql的分组.聚集类似,也是先map分组,再用reduce统计,最后还可 ...
- 浅析mongodb中group分组
这篇文章主要介绍了浅析mongodb中group分组的实现方法及示例,非常的简单实用,有需要的小伙伴可以参考下. group做的聚合有些复杂.先选定分组所依据的键,此后MongoDB就会将集合依据选定 ...
随机推荐
- windows下Qt5.4.2 for android开发环境配置
安装包链接: http://yunpan.cn/cFs5tikVA83hK 访问密码 d029 本人所有的软件都安装在D:/Qt 1. 安装 Qt 5.4.2 不在讲述 2, 安装p ...
- linux内核动态打印
参考:https://www.cnblogs.com/pengdonglin137/p/4622460.html https://linux.cn/article-3682-1.html?pr 如何打 ...
- [pixhawk笔记]5-uORB消息传递
本文主要内容翻译自官方文档:https://dev.px4.io/en/middleware/uorb.html 在前一篇笔记中使用uORB完成消息传递,实现了一个简单示例程序,本文将对uORB进行系 ...
- 学Git,用Git ③
不知道我前面是否将git讲清楚了,这里再稍微总结一下git的一个重要功能用法,同时增加两个很实用的git使用技巧. 1.git"读档"与git"回退" 我发现我 ...
- Spring mvc异步处理
基于Servlet3.0的异步处理,springmvc的异步处理 控制器返回callable, spring mvc异步处理,将callable提交到TaskExecutor 使用一个隔离线程进行执 ...
- 【bzoj2333 & luoguP3273】棘手的操作(线段树合并)
题目传送门:bzoj2333 luoguP3273 这操作还真“棘手”..听说这题是可并堆题?然而我不会可并堆.于是我就写了线段数合并,然后调了一晚上,数据结构毁一生!!!QAQ…… 其实这题也可以把 ...
- sql 取前一年、月
SQL SERVER 提供了一些时间函数:取当前时间:SELECT GETDATE() 取前一个月的时间:SELECT DATEADD(MONTH,-1,GETDATE()) 月份减一个月取年份:SE ...
- HDU5324 cqd分治
HDU5324 cqd分治 标签(空格分隔): 未分类 给你两个长度相同数列,求第一个不上升,第二个不下降的最长子序列长度. 这里要求的子序列对第一个和第二个来说是相同的.即如果你在第一个序列里选了第 ...
- gcc,gdb,make学习
实例学习gcc+gdb+make程序编译.链接.运行时头文件或动态链接库的查找 分四步: 预处理.编译.汇编.链接4steps:preprocess,compile,assemble,link
- hand first python 选读(2)
文件读取与异常 文件读取与判断 os模块是调用来处理文件的. 先从最原始的读取txt文件开始吧! 新建一个aaa.txt文档,键入如下英文名篇: Li Lei:"Hello,Han Meim ...