mongodb的mapReduce查询
mapReduce从字面上来理解就是两个过程:map映射以及reduce化简。是一种大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于group以及aggregate来说,功能更强大,并更加灵活。
映射过程:先把某一类数据分组归类,这里的映射过程是支持分布式的,一边遍历每一台服务器,一边进行分类。
化简过程:然后再在分组中进行运算,这里的化简过程也是支持分布式的,在分类的过程中直接运算了。也就是说如果是一个求和的过程,先在a服务器分组求和,然后再在b服务器分组求和····最后再把化简以后的数据进行最终处理。在映射化简的过程都是每台服务器自己的CPU在运算,大量的服务器同时来进行运算工作,这就是大数据基本理念。
mapReduce可以用js语法来写。下面是结构:
db.table.mapReduce( map, reduce, { query: query, out: out, //指定结果集以什么方式存储,可选参数包括: //replace:如果文档(table)存在,则替换table, //merge:如果文档中存在记录,则覆盖已存在的文档记录 //reduce: 如果文档中存在相同key的记录了,则先计算两条记录,然后覆盖旧记录 // {inline:1} 在内存中存储记录,不写入磁盘(用户数据量少的计算) sort: sort, limit: limit, finalize: function //这个function主要用来在存入out之前可以修改数据,function(key,values) { //return modifiedValues;} scope: document, //设置参数值,在这里设置的值在map,reduce,finalize函数中可见jsMode:boolean //是否减少执行过程中BSON和JS的转换,默认true]//false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce,//true时BSON-->js-->map-->reduce-->BSON verbose:boolean //是否产生更加详细的服务器日志,默认truekeytemp:boolean //true或false,表明结果输出到的collection是否是临时的,如果为true,则会在客户端连接中断后自动删除,如果你用的是MongoDB的mongo客户端连接, //那必须exit后才会删除。如果是脚本执行,脚本退出或调用close会自动删除结果collection } ) 必备参数:map,reduce, out,
详解:
map: function() {emit(this.cat_id,this.goods_number); }, // 函数内部要调用内置的emit函数,cat_id代表根据cat_id来进行分组,goods_number代表把文档中的goods_number字段映射到cat_id分组上的数据,其中this是指向向前的文档的,这里的第二个参数可以是一个对象,如果是一个对象的话,也是作为数组的元素压进数组里面;
reduce: function(cat_id,all_goods_number) {return Array.sum(all_goods_number)}, // cat_id代表着cat_id当前的这一组,all_goods_number代表当前这一组的goods_number集合,这部分返回的就是结果中的value值;
out: <output>, // 输出到某一个集合中,注意本属性来还支持如果输出的集合如果已经存在了,那是替换,合并还是继续reduce? 另外还支持输出到其他db的分片中,具体用到时查阅文档,筛选出现的键名分别是_id和value;
query: <document>, // 一个查询表达式,是先查询出来,再进行mapReduce的
sort: <document>, // 发往map函数前先给文档排序
limit: <number>, // 发往map函数的文档数量上限,该参数貌似不能用在分片模式下的mapreduce
finalize: function(key, reducedValue) {return modifiedObject; }, // 从reduce函数中接受的参数key与reducedValue,并且可以访问scope中设定的变量
scope: <document>, // 指定一个全局变量,能应用于finalize和reduce函数
jsMode: <boolean>, // 布尔值,是否减少执行过程中BSON和JS的转换,默认true,true时BSON-->js-->map-->reduce-->BSON,false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce。
verbose: <boolean> // 是否产生更加详细的服务器日志,默认true
在集合 orders 中查找 status:"A" 的数据,并根据 cust_id 来分组,并计算 amount 的总和。图解:
下面是我个人的动手实验。
1. 在logsInfo表数据中,根据logcategory进行分组统计数量。
2. db.表名. mapReduce实例:
3. 查看mapReduce的统计结果:
mapReduce中map函数可以理解为分组, emit里的key为分组依据,value建议用count统计次数。
下面这个例子value为数据库的值耗时慢,达不到效果。
mapReduce中的query参数,一般用来过滤使用。 当满足query的条件时,调用mapReduce。相当于SQL的where条件。 query的语句请看我上篇mongodb的文章,聚合查询中有写道这些条件操作符。
转载于:https://www.cnblogs.com/lishuotong/p/7114918.html
mongodb的mapReduce查询相关推荐
- MongoDB 进阶-关联查询
[苏州需要工作的加我QQ,内推介绍费平分] MongoDB 进阶 1.数据库命令 a.命令的工作原理 drop命令,在shell中删除一个集合,执行db.refactor.drop().其实这个函数实 ...
- 一篇文章带你搞定 MongoDB 中 MapReduce 使用
玩过 Hadoop 的小伙伴对 MapReduce 应该不陌生,MapReduce 的强大且灵活,它可以将一个大问题分解为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将 ...
- MongoDB:MapReduce的使用
文章目录 MongoDB:MapReduce的使用 一.简介 二.MapReduce命令 基本语法 案例 三.runCommand 命令 语法 案例 MongoDB:MapReduce的使用 一.简介 ...
- MongoDB中mapReduce的使用
MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...
- MongoDB自定义条件查询案例
MongoDB自定义条件查询案例
- MongoDB数据库(5.mongodb的聚合操作以及mongodb的高级查询2)
聚合aggregate 聚合(aggregate) 是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage) 组成的管道,可以对每个阶段的 管道进行分组.过滤等功能,然后经过一系列的处理, ...
- php mongodb 子查询,MongoDB数组子查询elemMatch
MongoDB数组子查询elemMatch 在 MongoDB数组子查询elemMatch详解 语法 db_name.collection_name.find({field:{$elemMatch:{ ...
- 使用MongoDB的MapReduce
MapReduce是Google在2004年推出的一种软件框架,用于支持对计算机集群中的大数据集进行分布式计算. 您可以从此处阅读有关MapReduce的信息 . MongoDB是用C ++编写的面向 ...
- MongoDB中MapReduce介绍与使用
本文来说下MongoDB中MapReduce介绍与使用 文章目录 概述 概述
- MongoDB文档查询操作(三)
关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标. 本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装Mong ...
最新文章
- 接口重复提交解决方案
- SAP CRM One Order status drop down list generation
- SAP UI5 log level
- kettle-实现每个分组的前N的数据
- linuxoracle查看用户权限_实现Oracle授予用户权限的一个实例
- 如何玩转sortablejs-vuedraggable实现表单嵌套拖拽功能
- 中国最佳广告创意图片_设计一个系统,以帮助赢得最佳创意
- Scala笔记整理(二):Scala数据结构—数组、map与tuple
- WEB建站规划之建站目的
- ActivityGroup对子Activity的管理
- 软件测试常用方法实例与分析
- 无线院2018下半年技术教练认证-专业能力测评初试
- 北京玉渊潭公园第二十届樱花节
- 如何用无监督模型,防范信用卡欺诈?
- oracle中begin end的作用,如何在SQL * Plus中使用begin/end运行Oracle查询?
- 通过windows官网工具制作win10启动盘并安装win10系统
- sshxcute_Java 使用SSH连接Linux 使用passwd命令修改密码
- 爬虫之遇到woff字体反爬
- 常识——renpy的rpa,rpyc文件解包与反编译
- IE内存泄露监测工具sIEve
热门文章
- 数据挖掘之关联规则和频繁项集
- knowledge_based topic model - 基于知识的主题模型概述
- Context Encoding for Semantic Segmentation-CVPR2018【论文理解】
- list 删除_算法面试题:一个List,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点!...
- python将txt读入矩阵_python读入txt数据,并转成矩阵
- ubuntu以安装包方式安装jdk13
- C++ string , int 之间相互转换
- ruby,gem,rails之间的关系
- 第13讲++连接查询和子查询
- MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解