在 MongoDB 上使用 Map/Reduce进行并行"统计"很容易。
使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),
遍历 collection 中所有的记录, 将key 与 value 传递给 Reduce 函数进行处理。
Map函数和Reduce函数可以使用 JavaScript 来实现,可以通过 db.runCommand 或 mapReduce 命令来执行一个MapReduce 的操作:

db.runCommand(
{mapReduce: <collection>,map: <function>,reduce: <function>,out: <output>,query: <document>,sort: <document>,limit: <number>,finalize: <function>,scope: <document>,jsMode: <boolean>,verbose: <boolean>
})

参数说明:
mapreduce: 要操作的目标集合。

map: 映射函数 (生成键值对序列,作为 reduce 函数参数)。

reduce: 统计函数。

out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。

query: 目标记录过滤

sort: 目标记录排序。

limit: 限制目标记录数量。

finalize: 最终处理函数 (对 reduce 返回结果进行最终整理后存入结果集合)

scope: 向 map、reduce、finalize 导入外部变量。

jsMode: 是否转换Bson格式在map和reduce执行间

verbose: 显示详细的时间统计信息。

下面我们来搞一个例子吧:

准备一些数据:

接下来我们演示如何统计各个班的学生数量

Map:

Map 函数必须调用 emit(key, value) 返回键值对,使用 this 访问当前待处理的 Document。

m = function(){emit(this.classid,1);
}

value 可以使用 JSON Object 传递 (支持多个属性值)。

例如:emit(this.classid, {count:1})
Reduce:

Reduce 函数接收的参数类似 Group 效果,将 Map 返回的键值序列组合成 { key, [value1,
value2, value3, value...] } 传递给 reduce。

r = function(key,values){var x = 0;values.forEach(function(v){x += v});return x;
}

Reduce 函数对这些 values 进行 "统计" 操作,返回结果可以使用 JSON Object。

Result:

mapReduce() 将结果存储在 "students_res" 表中。

Finalize:

利用 finalize() 我们可以对 reduce() 的结果做进一步处理。

f = function(key,value){return {classid:key,count:value}
}

我们再重新计算一次,看看结果:

Options:

我们还可以添加更多的控制细节。

db.runCommand({mapreduce:"stu",map:m,reduce:r,out:"stu_res",finalize:f,query:{age:{$gt:10}}
});

可以看到先进行了过滤,只取 age>10 的数据,然后再进行统计,所以就没有 age=9 的数
据了。

转载于:https://blog.51cto.com/janephp/1323812

MongoDB实战(4)MapReduce相关推荐

  1. MongoDB实战经验分享

    2019独角兽企业重金招聘Python工程师标准>>> 转自: http://www.cnblogs.com/ymind/archive/2012/04/25/2470551.htm ...

  2. 《大数据存储:MongoDB实战指南》一1.1 什么是大数据

    本节书摘来异步社区<大数据存储:MongoDB实战指南>一书中的第1章,第1.1节,作者: 郭远威 , 彭文波 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区" ...

  3. 国外经典!架构师必备:《MongoDB实战》第2版

    0.MongoDB优点与学习重要性 MongoDB是最流行的NoSQL数据库!MongoDB在NoSQL中排名第一!它高性能.轻量级,易于扩展.适用于移动互联网敏捷发展的需求.架构师必备!MongoD ...

  4. MongoDB实战系列之二:MongoDB的常用操作

    #以服务方式启动mongodb,要求验证 /elain/apps/mongodb/bin/mongod --fork --port 27001 --auth --dbpath /elain/data/ ...

  5. vue+websocket+express+mongodb实战项目(实时聊天)(一)

    ##vue+websocket+express+mongodb实战项目(实时聊天)(一) 在原来基础上增加了多个聊天室以及发送图片[vue+websocket+express+mongodb实战项目( ...

  6. 徐雷:做最好的自己!写在《mongodb实战》第2版和《WCF服务编程》第4版出版之际...

    做最好的自己:写在<mongodb实战>第2版和<WCF服务编程>第4版出版之际.很久之前我写过一个类似的文章. 这篇文章写给过去的10.也写给未来的自己. 你是否对自己的未来 ...

  7. MongoDB 实战(一)基于PyMongo的电影影评分析 | 对数据结果进行可视化展示以及分析 | 评论词云 | 分时间段分析

    文章目录 一.运行环境 二.实战介绍 三.获取数据 四.PyMongo 实战 4.1 连接MongoDB.创建集合 4.2 向 MongoDB 插入文档 4.3 查询MongoDB的数据 4.4 同样 ...

  8. 《OD大数据实战》MapReduce实战

    一.github使用手册 1. 我也用github(2)--关联本地工程到github 2. Git错误non-fast-forward后的冲突解决 3. Git中从远程的分支获取最新的版本到本地 4 ...

  9. 大数据之Hadoop学习——动手实战学习MapReduce编程实例

    文章目录 一.MapReduce理论基础 二.Hadoop.Spark学习路线及资源收纳 三.MapReduce编程实例 1.自定义对象序列化 需求分析 报错:Exception in thread ...

最新文章

  1. origin做主成分分析图_如何用SPSS做主成分分析?学习资料集锦
  2. 获取当前脚本所在的绝对路径
  3. Delphi处理TWebBrowser的Close事件
  4. c语言现代方法16章 基础、课后习题、基础等
  5. 浅谈对BFC的认识,以及用bfc解决浮动问题
  6. 程序员爱护自己身体的几点建议
  7. 基于visual Studio2013解决C语言竞赛题之0304整除数
  8. LSGO软件技术团队2015~2016学年第十一周(1109~1115)总结
  9. 两个pv挂一个vg_王者荣耀2020世冠杯小组赛全部结束,TS和AG、QG和E星一个半区
  10. Visual Studio 2013 + Intel(R) Visual Fortran 安装教程
  11. 查看python源码位置方法以及潜在误区
  12. PMP复习整理考点篇【9】--- 实施定性风险分析与实施定量风险分析
  13. 北京地区的图像处理公司
  14. 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1525445485395...
  15. vue-ueditor-wrap集成135编辑器
  16. 利用OpenCV识别图片背景是否透明
  17. 计算机学院品牌活动,计算机学院研究生会举办十佳健康品牌活动
  18. PLC课程设计【博途】
  19. L2-2 小字辈 (25 分)
  20. 新概念英语精讲 钟平 pdf_报告!“新概念”加入学而思英语群聊!

热门文章

  1. mybatis传入list、array等数据集合的处理
  2. Java NIO理解与使用
  3. WPF 快速制作可拖拽的对象和窗体
  4. 决定局域网的主要技术要素
  5. sap Bydesign 中解决添加元素或者字段时,多语言翻译的问题
  6. 限时抢订!价值4800元TechNet Plus赠阅一年!今天己到哈~~~
  7. 内存映射文件(File Mapping)API
  8. idea2018使用整理
  9. aspose.words for java操作文档doc,设置一级二级三级标题以及段落表格等详情
  10. java队列queue的我觉得很好的使用方式