MongoDB MapReduce用法简介

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);this

  }spa

参数说明:code

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

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()

 

  至此。转载请注明出处。

 

相关文章
相关标签/搜索