【MongoDB】MongoDB資料庫之MapReduce編程模型,mongodbmapreduce

來源:互聯網
上載者:User

【MongoDB】MongoDB資料庫之MapReduce編程模型,mongodbmapreduce

剛開始閱讀《Mongodb入門手冊》時候看到mapreduce,當時感覺好難,就直接忽略了。現在重新看到這部分知識的時候,痛下決心學習這塊知識。

一、概念說明

MongoDB的MapReduce相當於Mysql中“group by”,在mongodb上使用mapreduce執行並行資料統計很容易;使用MapReduce要實現兩個函數: map 和 reduce. 

map函數調用emit(key,value)遍曆collection中所有的記錄,將key和value傳遞給Reduce函數執行處理。Map函數和Reduce函數可以使用javascript來實現。下面我們來學習下mapreduce的方法參數: 


二、舉例說明1. 建立初始化資料


2. Map進行分組

Map函數必須調用emit(key,value)返回鍵值對,使用this訪問當前待處理的document.在本例中,map函數對students表按classid進行分組:


value可以使用json object傳遞(支援多個屬性值),如下面代碼錶示:

emit(this.classid,{count:1})

3. Reduce彙總計算

Reduce函數傳遞的參數類似與group 效果,將map返回的鍵值序列組合成{key,[value1,value2,value3,...]}傳遞給reduce,如下面代碼所示:


Reduce函數對於這些values進行統計,在本例中,reduce函數就是分別針對班級的記錄數量進行執行求和計算,返回結果是json object 對象

4. Result擷取結果

計算後如何獲得結果,這正是result函數的作用。可以執行db.結果集。find()可以獲得結果。其中結果集合可以通過out變數指定。


5. Finialize格式化輸出

利用finalize()可以對reduce的結果進行輸出樣式的格式化處理。


6. options定製輸出

還可以添加更多的控制細節,只需要在res函數的定義中加入一個query參數,既可以進一步過濾結果集,如下面的代碼所示:


對比查詢結果:


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.