Map-Reduce部分:Map-Reduce相当于关系型数据库中的group by,主要用于统计数据之用。MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用。

语法

db.collection.mapReduce(
map, // 即map函数。映射函数(生成键值对序列,作为reduce的参数)。
reduce, // 即reduce函数。统计函数。
options // 一些选项
)

使用Map-Reduce要实现两个函数map函数和reduce函数,map函数调用emit(key, value),遍历collection中所有的文档,将key与value传递给reduce函数进行处理。

map函数必须调用emit(key, value) 返回键值对。

参数说明

map函数部分

作用:用于分组

函数:function map(){

    emit(param1, param2);

  }

参数说明:

  param1:需要分组的字段,this.字段名
  param2:需要进行统计的字段,this.字段名

reduce部分

作用:处理需要统计的字段

函数:function reduce(key, values){

    // 统计字段处理

  }

参数说明:

  key: 指分组字段(emit的param1)对应的值
  values:指需要统计的字段(emit的param2)值组成的数组

几个简单的统计常用方法

1.对数值类型进行求和

function reduce(key, values){
return Array.sum(values);
}

2.对字符串类型进行拼凑

function reduce(key, values){
return values.join(', ');
}

option部分

out:将统计结果存放到集合中 (不指定则使用临时集合,在客户端断开后自动删除)
query:一个筛选条件,只有满足条件的文档才会调用map函数(query,limit,sort可以随意组合)
sort:和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
limit:发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

栗子

先插入一些测试用的数据。

>db.mythings.insert({location:'Guangzhou', population:2400})
>db.mythings.insert({location:'Shanghai', population:2500})
>db.mythings.insert({location:'Beijing', population:2200})
>db.mythings.insert({location:'Shenzhen', population:2100})
>db.mythings.insert({location:'Guangzhou', population:2400})
>db.mythings.insert({location:'Shanghai', population:2500})
>db.mythings.insert({location:'Beijing', population:2200})
>db.mythings.insert({location:'Shenzhen', population:2100})

需求:统计各城市的人口总数。

>function map(){
emit(this.location, this.population);
} >function reduce( key, values ){
return {"城市":key, "总数":Array.sum(values)};
} >db.mythings.mapReduce( map, reduce, {
out: "popu_counts",
query: {}
}).find()

  至此。转载请注明出处。

MongoDB MapReduce用法简介的更多相关文章

  1. 爬虫入门【8】Python连接MongoDB的用法简介

    MongoDB的连接和数据存取 MongoDB是一种跨平台,面向文档的NoSQL数据库,提供高性能,高可用性并且易于扩展. 包含数据库,集合,文档等几个重要概念. 我们在这里不介绍MongoDB的特点 ...

  2. MongoDB基本用法

    MongoDB基本用法(增删改高级查询.mapreduce) 分享一下我经常用到的自己写的mongo用法示例 该示例基于当前最新的mongo驱动,版本为mongo-2.10.1.jar,用junit写 ...

  3. MongoDB之TextSearch简介

    MongoDB之TextSearch简介  MongoDB支持对文本内容执行文本搜索操作,其提供了索引text index和查询操作$text来完成文本搜索功能.下面我们通过一个简单的例子来体验一下M ...

  4. MongoDB MapReduce(转)

    MapReduce MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE).这样做的好处是可以在任务被分解后,可以通过大量机 ...

  5. IOS NSInvocation用法简介

    IOS NSInvocation用法简介 2012-10-25 19:59 来源:博客园 作者:csj007523 字号:T|T [摘要]在 iOS中可以直接调用某个对象的消息方式有两种,其中一种就是 ...

  6. JodaTime用法简介

    JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...

  7. Apache自带压力测试工具ab用法简介

    ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...

  8. Postman用法简介

    转自:http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法简介 转载 2016年10月10日 09:04:10 10 ...

  9. MSSQL Sql加密函数 hashbytes 用法简介

    转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashbytes函数功能为:返回一个字符,通过 MD2.MD4.MD5. ...

随机推荐

  1. [Swift]LeetCode372. 超级次方 | Super Pow

    Your task is to calculate ab mod 1337 where a is a positive integer and bis an extremely large posit ...

  2. [Swift]LeetCode438. 找到字符串中所有字母异位词 | Find All Anagrams in a String

    Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...

  3. 老司机教你用原生JDK 撸一个 MVC 框架!!!

    其实 Spring MVC 是一个基于请求驱动的 Web 框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器进行处理,具体工作原理见下图. 在这里,就不详细谈相关的原 ...

  4. 解决Xftp连接不上Linux虚拟机问题。

    首先 打开cmd窗口 ping一下 虚拟机的ip 这样证明是可以连接的,如果不可以就是你ip地址这块的问题. 可以之后打开Xftp新建 ,把默认的FTP改成SFTP.

  5. JS执行环境,作用域链及非块状作用域

    JS中的执行环境,顾名思义就是变量或函数所执行时的环境.在我的理解中,执行环境和作用域相差不大. 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中.而在函数执行之后 ...

  6. Django中的模板渲染是什么

    首先建立一个页面 在views.py中增加一个方法 配置URL 如何实现的呢 这就是渲染,传递的数据不同显示的数据也不同.Django里的渲染引擎和Jinja的虽然不同但是语法基本通用.现在明白什么叫 ...

  7. git版本控制工具的使用

    目录 git版本管理工具使用 一丶Git的下载与安装 1.windows下的git的下载与安装 2.linux下的git安装 二丶常用命令 三丶Git仓库 1.配置仓库信息 2.仓库的创建于管理 四丶 ...

  8. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  9. JDK源码分析(9)之 WeakHashMap 相关

    平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它:但是如果我们不是很清楚它的生命周期,这时候就比较麻烦:通常有这样几种处理方式: 由一 ...

  10. ES6躬行记(19)——生成器

    根据ES6制订的标准自定义迭代器实现起来比较复杂,因此ES6又引入了生成器的概念,生成器(Generator)是一个能直接创建并返回迭代器的特殊函数,可将其赋给可迭代对象的Symbol.iterato ...