第24章:MongoDB-聚合操作--MapReduce
在MongoDB的聚合框架中,还可以使用MapReduce,它非常强大和灵活,但具有一定的复杂性,专门用于实现一些复杂的聚合功能。
MongoDB中的MapReduce使用JavaScript来作为查询语言,因此能表达任意的逻辑,但是它运行非常慢,不应该用在实时的数据分析中。
MapReduce是整个大数据的精髓所在(实际中别用),所谓的MapReduce就是分为两步处理数据:
· Map:将数据分别取出;
· Reduce:负责数据的最后的处理。
可是要想在MongoDB里面实现MapReduce处理,那么复杂度是相当高的。
1:finalize:function :可以将reduce的结果发送到finalize,这是整个处理的最后一步
2:keeptemp:boolean :是否在连接关闭的时候,保存临时结果集合
3:query:document :在发送给map前对文档进行过滤
4:sort:document :在发送给map前对文档进行排序
5:limit:integer :发往map函数的文档数量上限
6:scope:document :可以在javascript中使用的变量
7:verbose:boolean :是否记录详细的服务器日志
--按照职位分组,取得每个职位的人名
建立一组雇员数据
db.emps.insert("name":"张三",age": 31,"sex": "男", job": "CLERK", "salary": 2000);
db.emps.insert("name":"李四",age": 31,"sex": "女", job": "CLERK", "salary": 3000);
db.emps.insert("name":"王五",age": 31,"sex": "男", job": "MANAGER", "salary": 4000);
db.emps.insert("name":"赵六",age": 31,"sex": "女", job": "MANAGER", "salary": 5000);
db.emps.insert("name":"孙七",age": 31,"sex": "男", job": "CLERK", "salary": 6000);
db.emps.insert("name":"王八",age": 31,"sex": "女", job": "PRESIDENT", "salary": 8000);
使用MapReduce操作最终会将处理结果保存在一个单独的集合里面,而最终的处理效果如下。
第一步:编写分组的定义
var jobMaapFUN = function(key,value)[
emit("job":key,"names":value);//按照job分组,取出name
};
第二步:编写reduce操作;
var jobReduceFUN = function(key,value)[
return("job":key,"names":value);
};
第三步:针对于MapReduce处理完成的数据实际上也可以执行一个最后处理。
var jobFinalizeFun=function(key, values){
if (key == "PRESIDENT"){
return{"job":key," names": values,"info":"公司的老大"};
}
return{"job":key," names": values,"info":"打工仔"};
}
进行操作的整合:
db. runComumand({
"mapreduce":"emps",
"map": jobMapFun,
"reduce":jobReduceFun,
"out":"t_job_emp",
finalize": jobFinalizeFun}
);
现在执行之后,所有的处理结果都保存在了“t_job_emp”集合里面。
db.t_job_emp .find().pretty();
第24章:MongoDB-聚合操作--MapReduce的更多相关文章
- MongoDB 聚合操作
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- MongoDB 聚合操作(转)
在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...
- mongodb聚合操作
1. mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功能,然后经过一系列的处理 ...
- Mongodb学习笔记四(Mongodb聚合函数)
第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...
- mongodb聚合查询-aggregate
Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...
- MongoDB学习笔记——聚合操作之MapReduce
MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...
- mongodb的聚合操作
在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用 聚合框架(aggregation) 来完成.在mongodb ...
- MongoDB中的聚合操作
根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...
- MongoDB的聚合操作以及与Python的交互
上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...
随机推荐
- 【Linux 线程】常用线程函数复习《二》
1.函数pthread_join /************************************************************************* > Fil ...
- iPhone X系列 的获取 - 安全区顶部和底部高度
///1. 获得当前窗口 var JY_WINDOW: UIWindow? { get{ if let app = UIApplication.shared.delegate as? AppDeleg ...
- 用js写已知abc+cba = 1333,其中a、b、c均为一位数,编程求出满足条件的a、b、c所有组合。
<!--<script type="text/javascript"> //已知abc+cba = 1333,其中a.b.c均为一位数,编程求出满足条件的a.b. ...
- jQuery 向另一个页面传参,同时跳转到该页面
为了使参数能够传递到另外一个页面,使用ajax的跳转方式 $.ajax({ type: "POST", url:"/admin/sysjgl/sysjck/sjcs&qu ...
- input框和文字对齐问题
css样式解决! style="vertical-align: text-bottom;margin-bottom: 2px;"一.问题产生的条件对于14像素大小的字体是没有本篇所 ...
- tensorflow.reshap(tensor,shape,name)的使用说明
tensorflow as tf tf.reshape(tensor, shape, name=None) reshape作用是将tensor变换为指定shape的形式. 其中shape为一个列表形式 ...
- 比较两个List列表,取得List中不同项返回
/// <summary> /// 比对模型及属性数组 /// </summary> /// <typeparam name="TM">< ...
- BZOJ2330或洛谷3275 [SCOI2011]糖果
BZOJ原题链接 洛谷原题链接 很明显的差分约束,但数据范围较大,朴素\(SPFA\)判正环求解会\(T\)(理论上如此,但我看到有挺多人用朴素的还跑得挺快..),所以需要优化. 我们所建立的有向图中 ...
- 链接PDO
header('Content-type:text/html;Charset=utf-8'); /** * 实例化PDO对象 */ // 1, 设置相关的参数 // 1.1 确定数据源 $dbms = ...
- Linux中处理字符串
获取字符串长度: ${#字符串变量名} 截取子串: 1. expr substr 字符串 起始位置 截取长度 2. 命令输出 | cut -c 起始位置-结束位置 命令输出 | cut -c &quo ...