第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聚合 什么是 ...
随机推荐
- HBase数据库集群配置【转】
https://www.cnblogs.com/ejiyuan/p/5591613.html HBase简介 HBase是Apache Hadoop中的一个子项目,是一个HBase是一个开源的.分布式 ...
- importlib的用法
这个模块可以通过字符串导入模块 比如我们有下面的例子 需要导入的模块的代码 在test_import目录下有一个test1的py文件 name = "中国是个大傻逼" class ...
- java 基础之--传统网络编程
什么是socket ? socket 是连接运行在网络上的两个程序间的双向通讯端点 服务器将某一套接字绑定到一个特定的端口,并通过这一套接字等待和监听客户端的的连接请求 客户端通过这个端口与服务器进行 ...
- vue tab切换
<template> <div class="box"> <ul> <li v-for="(item,index) in arr ...
- 访问注解(annotation)的几种常见方法
java的注解处理器类主要是AnnotatedElement接口的实现类实现,为位于java.lang.reflect包下.由下面的class源码可知AnnotatedElement接口是所有元素的父 ...
- [z]一分钟教你知道乐观锁和悲观锁的区别
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传统的关系型数据 ...
- 基础数据类型补充,及capy daty7
1,基础数据类型,总结补充. int:bit_lenth() str: captilze() 首字母大写,其余小写. upper() 全大写. lower() 全小写. find() 通过元素找索引, ...
- Oracle_PL/SQL(5) 包
包1.定义:包用于逻辑组合相关的PL/SQL类型,项和子程序,由包规范和包体组成 建立包规范:包规范是包与应用程序之间的接口,用于定义包的公用组件, 包括常量,变量,游标,过程,函数等 建立包体:用于 ...
- PID参数调节口诀
参数整定找最佳, 从小到大顺序查. 先是比例后积分, 最后再把微分加. 曲线振荡很频繁, 比例度盘要放大. 曲线漂浮绕大弯, 比例度盘往小扳. 曲线偏离回复慢, 积分时间往下降. 曲线波动周期长, 积 ...
- c#while循环注意continue的地方
在使用while 时发现一个很大的问题,continue最好慎用! private void do() { int i = 0; while (true) { //continue;//绝对的死循环 ...