1,概述
MapReduce是个非常灵活和强大的数据聚合工具。它的好处是可以把一个聚合任务分解为多个小的任务,分配到多服务器上并行处理。MongoDB也提供了MapReduce,当然查询语肯定是JavaScript。
MongoDB中的MapReduce相当于关系数据库中的group by。使用MapReduce要实现两个函数Map和Reduce函数。Map函数调用emit(key,value),遍历Collection中所有的记录,将key与value传递给Reduce函数进行处理。
2,基本语法

db.runCommand({
mapreduce:<collection>,
map:<mapfunction>,
reduce:<reducefunction>,
[,query:<query filter object>]
[,sort:<sorts the input objects using this key.Useful for optimization,like sorting by the emit key for fewer reduces>]
[,limit:<number of objects to return from collection>]
[,out:<see output options below>]
[,keeptemp:<true|false>]
[,finalize:<finalizefunction>]
[,scope:<object where fields go into javascript global scope>]
[,verbose:true]
});

参数说明:
Mapreduce:要操作的目标集合
Map:映射函数(生成键值对序列,作为reduce函数参数)
Reduce:统计函数
Query:目标记录过滤
Sort:目标记录排序
Limit:限制目标记录数量
Out:统计结果存放集合(不指定使用临时集合,在客户端断开后自动删除)
Keeptemp:是否保留临时集合
Finalize:最终处理函数(对reduce返回结果进行最终整理后存入结果集合)
Scope:向map、reduce、finalize导入外部变量
Verbose:显示详细的时间统计信息。

3,应用实例
(1)查询active表,每个cid对应的次数。相当于以cid分组。

map=function (){
emit(this.cid,{count:1})
}
reduce=function(key,values){
var cnt=0;
values.forEach(function(val){ cnt+=val.count;});
return {"count":cnt};
}
db.active.mapReduce(map,reduce,{out:'mr1'})
(2)按cid和日期分组
map=function(){
emit({cdi:this.cid,cd:this.cd},{count:1})
}
reduce=function(key,values){
var cnt=0;
values.forEach(function(val){ cnt+=val.count;});
return {"count":cnt};
}
db.active.mapReduce(map,reduce,{out:'mr2'})
(3)每个cid的产品数量,总金额是多少
map=function(){
emit(this.cid,{amount:this.price,count:1})
}
reduce=function (key,values){
var res={amount:0,count:0}
values.forEach(function(val){
res.amount+=val.amount;
res.count+=val.count
});
return res;
}
db.test.mapReduce(map,reduce,{out:"mr3"})

我的总结:在mongodb中,map对集合分组。reduce对分组结果汇总。

mongodb学习3---mongo的MapReduce的更多相关文章

  1. [Spring Data MongoDB]学习笔记--MapReduce

    mongodb的MapReduce主要包含两个方法:map和reduce. 举个例子,假设现在有下面3条记录 { "_id" : ObjectId("4e5ff893c0 ...

  2. MongoDB学习笔记~Mongo集群和副本集

    回到目录 一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器 ...

  3. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  4. MongoDB学习笔记系列~目录

    MongoDB学习笔记~环境搭建 (2015-03-30 10:34) MongoDB学习笔记~MongoDBRepository仓储的实现 (2015-04-08 12:00) MongoDB学习笔 ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  7. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  8. MongoDB学习总结(二)

    前言:学习札记! MongoDB学习总结(二) 1.  安装.初识 之前写过一篇MongoDB的快速上手文章,里边详细的讲了如何安装.启动MongoDB,这里就不再累述安装过程,简单介绍一下Mongo ...

  9. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  10. MongoDB学习笔记二—Shell操作

    数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...

随机推荐

  1. 移植UE4的模型操作到Unity中

    最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...

  2. iOS10 升级兼容必备参考

    最近提交审核不通过,再iOS10上运行崩溃 .然后需要处理崩溃的问题,晚上找了一下,整理收集起来. 方便后续查看使用. 以下参考链接特别有用: http://blog.csdn.net/gbking/ ...

  3. Windows下Git安装指南

    参考<Git权威指南>安装整理,图书配套网址参见[1] 1. Cygwin下安装配置Git 1. 在Windows下安装配置Git有2种不同的方案 (1)msysGit, (2)Cygwi ...

  4. 创建 iPhone/iOS8 弹出菜单(窗口)

    基本步骤 添加视图:主视图与弹出视图 关联视图 配置弹出视图 编码实现:弹出菜单样式及控制器委托 override func prepareForSegue(segue: UIStoryboardSe ...

  5. java基本加密算法

    简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...

  6. 调皮的MySQL服务 请你不要再躲猫猫

    问题说明 Win10企业版 64位: MySQL5.6 64位: 临时在本机部署一套系统,需要用到MySQL,发现Windows服务下居然找不到MySQL这个服务,原先配置好的GUI以及应用程序都连不 ...

  7. 认识SuperSocket 1.6.4

    SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,由江振宇先生开发,之所以选用它是因为一下几点恰好复合项目需求: 开源,基于Apache 2.0协议,可以免费使用到商业项目. 高 ...

  8. 如何在shell中打印出带颜色的字符?

    先看如下的效果: 方法: 先看如下的脚本sh3.sh: #!/bin/bash echo "peng" echo "$(color bold yellow) ------ ...

  9. EB-SAM9G45裸机程序下载方法

    开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...

  10. SQL中对XML的处理

    DECLARE  @PreSOMasterXML XMLDECLARE   @SDA VARCHAR(100)SET @PreSOMasterXML=N'<ProcessTaskRequest& ...