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

來源:互聯網
上載者:User

標籤: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編程模型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.