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

  }

參數說明:

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

 

  至此。轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM