①MapReduce

在MongoDB的聚合框架中,还可以使用MapReduce,它非常强大和灵活,但具有一定的复杂性,专门用于实现一些复杂的聚合功能。

MongoDB中的MapReduce使用JavaScript来作为查询语言,因此能表达任意的逻辑,但是它运行非常慢,不应该用在实时的数据分析中。

MapReduce是整个大数据的精髓所在(实际中别用),所谓的MapReduce就是分为两步处理数据:

· Map:将数据分别取出;

· Reduce:负责数据的最后的处理。

可是要想在MongoDB里面实现MapReduce处理,那么复杂度是相当高的。

③更多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();

范例
--统计出各性别的人数、平均工资、最低工资、雇员姓名
虽然大数据的时代提供有最强悍的MapReduce支持,但是从现实的开发来讲,真的不可能使用起来。
 
 
 
 
 
 
 
 
 
 
 
 
 
 

第24章:MongoDB-聚合操作--MapReduce的更多相关文章

  1. MongoDB 聚合操作

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  2. MongoDB 聚合操作(转)

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  3. mongodb聚合操作

    1. mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功能,然后经过一系列的处理 ...

  4. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  5. mongodb聚合查询-aggregate

    Mongodb-aggregate 在工作中经常遇到一些mongodb的聚合操作,和mysql对比起来,mongo存储的可以是复杂的类型,比如数组,字典等mysql不善于处理的文档型结构,但是mong ...

  6. MongoDB学习笔记——聚合操作之MapReduce

    MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...

  7. mongodb的聚合操作

    在mongodb中有时候我们需要对数据进行分析操作,比如一些统计操作,这个时候简单的查询操作(find)就搞不定这些需求,因此就需要使用  聚合框架(aggregation) 来完成.在mongodb ...

  8. MongoDB中的聚合操作

    根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...

  9. MongoDB的聚合操作以及与Python的交互

    上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...

随机推荐

  1. 【Linux 线程】线程同步《二》

    1.读写锁 与互斥量类似,但读写锁允许更高的并行性.其特性为:写独占,读共享. 读写锁状态: 一把读写锁具备三种状态: (1)读模式下加锁状态 (读锁) (2)写模式下加锁状态 (写锁) (3)不加锁 ...

  2. 【Linux 进程】fork函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  3. 干净的ssm框架项目

    其中数据库只有如下表与字段 访问效果: 项目下载: 干净的ssm框架项目.rar

  4. mybatis批量更新update-设置多个字段值 报错 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    mybatis批量更新update-设置多个字段值 2016年08月01日 12:49:26 姚一号 阅读数:29539 标签: mysql mybatis批量更新批量更新allowMultiQuer ...

  5. android项目安装报错:INSTALL_FAILED_CONFLICTING_PROVIDER

    这主要是由于调试的环境中已有一个同名的Provider存在. 解决方法是修改AndroidManifest.xml中的 <provider android:name="applockP ...

  6. phalcon安装-遇坑php-config is not installed 解决方法

    通过源码编译安装php环境,按照phalcon官方文档安装扩展,会遇到php-config is not installed的坑. 尝试通过下列命令可以解决: cd /opt/cphalcon-/bu ...

  7. php中时间转换函数

    date("Y-m-d H:i",$unixtime)  1.php中获得今天零点的时间戳 要获得零点的unix时间戳,可以使用 $todaytime=strtotime(“tod ...

  8. golang 创建一个简单的广播echo服务器

    package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //htt ...

  9. 关系测试# 或 print(s2-s)Python 集合

    1集合是一个无序的,不重复的数据组合,它的主要作用如下(set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key): 去重,把一个列表变成 ...

  10. C++树的插入和遍历(关于指针的指针,指针的引用的思考)

    题目 写一个树的插入和遍历的算法,插入时按照单词的字典顺序排序(左边放比它"小"的单词,右边放比它"大"的单词),对重复插入的单词进行计数. 程序源码 #inc ...