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就会将集合依据选定 ...
随机推荐
- springmvc获取bean
1.普通注解方式获取 2.springcontextholder获取 ChatHistoryService chatHistoryService = SpringContextHolder.getBe ...
- python3_Logging模块详解
python的logging模块提供了通用的日志系统,可以方便第三方模块或应用使用. 简单使用 import logging # logging.config.fileConfig("./l ...
- python单元测试框架pytest——fixture函数(类似unitest的setup和teardown)
pytest的setup和teardown函数(曾被一家云计算面试官问到过). pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作.与python自带的unitest ...
- window连接linux共享
前提说明:windows主机信息:192.168.1.100 帐号:abc 密码:123 共享文件夹:sharelinux主机信息:192.168.1.200 帐号:def 密码:456 共享文件夹: ...
- Python3.x:pytesseract识别率提高(样本训练)
Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 地址:https://sourceforge.net/projects/tessera ...
- servlet类与Spring Controller类的关系
以前的java web项目,需要在web.xml中定义servlet,对应不同的请求,而在spring项目中,我们用controller定义了各种各样的servlet(当然不包括DispatcherS ...
- Java Swing简单的加法器
package test; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class FrameDe ...
- [翻译]小提示:使用figure和figcaption元素的正确方式
figure和figcaption是一对经常被一起使用的语义化标签.如果你还没有看过规范中的定义,现在有机会在你的项目中使用它们了.如果你不知道怎么用,下面是关于如何正确使用它们的一些提示. figu ...
- 分布式文档存储数据库(MongoDB)副本集配置
副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...
- Django Nginx配置
1.安装uwsgi.flup.djangowget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz 2.项目创建和配置2.1.创建项 ...