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]LeetCode84. 柱状图中最大的矩形 | Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  2. [Swift]LeetCode521. 最长特殊序列 Ⅰ | Longest Uncommon Subsequence I

    Given a group of two strings, you need to find the longest uncommon subsequence of this group of two ...

  3. [Swift]LeetCode1003. 检查替换后的词是否有效 | Check If Word Is Valid After Substitutions

    We are given that the string "abc" is valid. From any valid string V, we may split V into ...

  4. Metrics.NET step by step

    安装Nuget包 nuget中搜索metrics,如图: 配置Metrics 在程序入口处插入配置Metrics的代码. class Program { static void Main(string ...

  5. python-类的定制

    1.看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的.__slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让cl ...

  6. Linux下python2和python3共存

    python下载地址: https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tar.xz 下载命令: wget https://www.pytho ...

  7. 多机部署redis5.0集群环境

    redis5.0集群部署 一.集群介绍 Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redi ...

  8. asp.net core 系列 4 注入服务的生存期

    一.服务的生存期 在容器中每个注册的服务,根据程序应用需求都可以选择合适的服务生存期,ASP.NET Core 服务有三种生存期配置: (1) Transient:暂时生存期,在每次请求时被创建. 这 ...

  9. Chapter 4 Invitations——11

    "Bella?" His voice shouldn't have been so familiar to me, as if I'd known the sound of it ...

  10. 全文检索-Elasticsearch (一) 安装与基础概念

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 Elasticsearch由java开发,所以在搭建时,需先安 ...