MongoDB MapReduce学习笔记
http://cnodejs.org/topic/51a8a9ed555d34c67831fb8b
http://garyli.iteye.com/blog/2079158
MapReduce应该算是MongoDB操作中比较复杂的了,自己开始理解的时候还是动了动脑子的,所以记录在此!
命令语法:详细看
|
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,<br> //true时BSON-->js-->map-->reduce-->BSON [, verbose : 布尔值,是否产生更加详细的服务器日志,默认true] } ); |
测试数据:

现在我要统计同一age的name,也就是像如下的结果:
{age:0,names:["name_6","name_12","name_18"]}
{age:1,names:["name_1","name_7","name_13","name_19"]}
......
第一步是写映射(Map)函数,可以简单的理解成分组吧~
var m=function(){
emit(this.age,this.name);
}
emit的第一个参数是key,就是分组的依据,这是自然是age了,后一个是value,可以是要统计的数据,下面会说明,value可以是JSON对象。
这样m就会把送过来的数据根据key分组了,可以想象成如下结构:
第一组
{key:0,values: ["name_6","name_12","name_18"] 第二组
{key:1,values: ["name_1","name_7","name_13","name_19"]
......
组中的key其实就是age的值了,values是个数组,数组内的成员都有相同的age!!。
第二步就是简化了,编写reduce函数:
var r=function(key,values){
var ret={age:key,names:values};
return ret;
}
reduce函数会处理每一个分组,参数也正好是我们想像分组里的key和values。
这里reduce函数只是简单的把key和values包装了一下,因为不用怎么处理就是我们想要的结果了,然后返回一个对象。对象结构正好和我们想象的相符!:
{age:对应的age,names:[名字1,名字2..]}
最后,还可以编写finalize函数对reduce的返回值做最后处理:
var f=function(key,rval){
if(key==0){
rval.msg="a new life,baby!";
}
return rval
}
这里的key还是上面的key,也就是还是age,rval是reduce的返回值,所以rval的一个实例如:{age:0,names:["name_6","name_12","name_18"]},
这里判断 key 是不是 0 ,如果是而在 rval 对象上加 msg 属性,显然也可以判断 rval.age==0,因为 key 和 rval.age 是相等的嘛!!
这里其他的选项就不说了,一看就知道。
运行:
db.runCommand({
mapreduce:"t",
map:m,
reduce:r,
finalize:f,
out:"t_age_names"
}
)

结果导入到 t_age_names 集合中,查询出来正是我想要的结果,看一下文档的结构,不难发现,_id 就是 key,value 就是处理后的返回值。
MongoDB MapReduce学习笔记的更多相关文章
- Hadoop之MapReduce学习笔记(二)
主要内容: mapreduce编程模型再解释: ob提交方式: windows->yarn windows->local : linux->local linux->yarn: ...
- MongoDB快速学习笔记
一,下载. XP系统,32位的下载地址: https://www.mongodb.org/dl/win32/i386 例:win32/mongodb-win32-i386-2.0.7.ziphttp: ...
- Hadoop - MapReduce学习笔记(详细)
第1章 MapReduce概述 定义:是一个分布式运算程序的编程框架 优缺点:易于编程.良好的扩展性.高容错性.适合PB级以上数据的离线处理 核心思想:MapReduce 编程模型只能包含一个Map ...
- MongoDB入门学习笔记之简介与安装配置
一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...
- mapreduce 学习笔记
mapreduce基础概念 mapreduce是一个分布式计算框架(hadoop是mapreduce框架的一个免费开源java实现). mapreduce要点 主节点(master node)控制ma ...
- mongodb的学习笔记一(集合和文档的增删改查)
1数据库的增删改查 一.增加一个数据库: use blog-----切换到指定的数据库,如果数据库不存在,则自动创建该数据库(新建的数据库,如果没有存储对应的集合,是不会显示出来的) 二.删除一个数据 ...
- Hadoop之MapReduce学习笔记(一)
主要内容:mapreduce整体工作机制介绍:wordcont的编写(map逻辑 和 reduce逻辑)与提交集群运行:调度平台yarn的快速理解以及yarn集群的安装与启动. 1.mapreduce ...
- MapReduce学习笔记
一.MapReduce概述 MapReduce 是 Hadoop 的核心组成, 是专用于进行数据计算的,是一种分布式计算模型.由Google提出,主要用于搜索领域,解决海量数据的计算问题. MapRe ...
- MongoDB 基本操作学习笔记
// 查看所有数据库 show dbs // amdin 0.000GB // local 0.000GB // 使用数据库 use admin // switched to db admin // ...
随机推荐
- Database(Mysql、Sqlserver) Configuration Security Reinforcement
目录 . 引言 . Mysql . Sqlserver 1. 引言 黑客获取了数据库的帐号密码之后,就可以通过Database Client登录数据库,利用SQL指令.数据库指令执行组件进行进一步的提 ...
- sed学习笔记
sed是一个文本处理工具,可以根据给出的条件,自动对文本进行处理.在使用之前,需要知道的有三点:1. sed是逐行进行处理:2. sed不对原文件进行修改:3. sed默认是将处理后的内容打印到标准输 ...
- C语言实现贪吃蛇源码
先放效果 源代码 //2016-2-12 //zhaoyu //Gmail:zhaoyu1995.com@gmail.com //Language: C //Platform:Code::Blocks ...
- java.lang.UnsupportedOperationException: Not supported by BasicDataSource
场景: SpringMVC+Hibernate+Maven 问题: 在src/main/resources 目录中添加hibernate.properties文件, 则如果存在这句hibernate. ...
- 旅图——UI测试
测试目标 保证代码质量,确保基础功能的实现,可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误,减少最终测试时查找困难无方向. UI测试 登录过程 模拟登录过程,密码正确与密码错误的情 ...
- 安卓开发30:AsyncTask的用法
http://blog.csdn.net/initphp/article/details/10392093 安卓开发笔记系列(43) 在开发Android应用时必须遵守单线程模型的原则: Andro ...
- jpa OneToMany
Project, project_id @OneToMany(mappedBy = "project") private Set<Ap> apSet =new Hash ...
- Windows XP SP3 Professional 微软(MSDN)官方原版系统
Windows XP SP3 Professional 微软(MSDN)官方原版系统 Windows XP(版本号:5.1,开发代号:Whistler)是微软公司推出供个人电脑使用的操作系统,其RTM ...
- ORACLE 错误:oralce record is locked by another user
方法/步骤 打开PL/SQL客户端,然后修改表记录中的数据,提交修改,如下提示 步骤阅读 2 我们关闭异常警告窗口,在执行sql的窗口中输入如下命令:select t2.username,t ...
- C++ Pointer-to-Member Selector
http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm https://m ...