標籤:mongodb mapreduce
剛開始閱讀《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參數,既可以進一步過濾結果集,如下面的代碼所示:
對比查詢結果:
【MongoDB】MongoDB資料庫之MapReduce編程模型