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. 机器学习入门 - Google机器学习速成课程 - 笔记汇总

    机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...

  2. python编译、运行、反编译pyc文件

    为了加密 .py 文件,以前一般使用打包成 exe ,但是最近发现可以将其编译成二进制文件 pyc ,虽然反编译难度不大,但是也需要一些水平 编译生成 pyc: 单个文件 代码: import py_ ...

  3. Python内置函数(36)——iter

    英文文档: iter(object[, sentinel]) Return an iterator object. The first argument is interpreted very dif ...

  4. .NET Core实战项目之CMS 第十七章 CMS网站系统的部署

    目前我们的.NET Core实战项目之CMS系列教程基本走到尾声了,通过这一系列的学习你应该能够轻松应对.NET Core的日常开发了!当然这个CMS系统的一些逻辑处理还需要优化,如没有引入日志组件以 ...

  5. java基础(十一 )-----反射——Java高级开发必须懂的

    本文我们通过一个实际的例子来演示反射在编程中的应用,可能之前大家对反射的学习,仅仅是停留在概念层面,不知道反射究竟应用在哪,所以是一头雾水.相信通过这篇教程,会让你对反射有一个更深层次的认知. 概念 ...

  6. Chorme浏览器渲染MathJax时出现竖线的解决方法

    Chorme浏览器渲染MathJax时出现竖线的原因分析与解决方法 查资料知,Chorme中显示MathJax时出现竖线的原因如下: 新版的Chorme浏览器在解析css时,会对其中的值进行向上取整( ...

  7. linux 远程ssh免密登录

    写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...

  8. leetcode — reverse-linked-list-ii

    /** * Source : https://oj.leetcode.com/problems/reverse-linked-list-ii/ * * * Reverse a linked list ...

  9. ldap配置系列二:jenkins集成ldap

    ldap配置系列二:jenkins集成ldap jenkins简介 jenkins是一个独立的.开放源码的自动化服务器,它可以用于自动化与构建.测试.交付或部署软件相关的各种任务. jenkins官方 ...

  10. 从SQL Server CloudDBA 看云数据库智能化

    最近阿里云数据库SQL Server在控制台推出了CloudDBA服务,重点解决数据库性能优化领域问题,帮助客户更好的使用好RDS数据库,这是继MySQL之后第二个关系型数据库提供类似的服务.   数 ...