MapReduce是面向大數據並行處理的計算模型。MongoDb中提供了MapReduce的聚合工具,來實現任意複雜的邏輯,很強大,很靈活。它的計算理念是:將一個大問題拆分紅若干個小問題,將各個小問題發送到不一樣的機器上進行計算。在各個小問題解決完時,再將這些小問題的結果合併爲一個最終的結果。java
從設計理念能夠看出,MapReduce操做有2個階段:第一個階段是Map(映射)階段,第二個階段是Reduce(化簡)階段。能夠參考官網的一個demo:數組
附上我用java寫的一段MapReduce代碼:數據結構
/** * 查詢訂單表中的積分 * * @return 積分數 */ public int selectOrderInfoScore(Query query) { String mapStr = "function() { emit(this.pay_type, { \"score\": this.score }) }"; String reduce = "function(key, values) {\n" + " var scores = 0;\n" + " for (var i in values) {\n" + " scores += values[i].score;\n" + " }\n" + " return { \"score\": scores };\n" + " }"; MapReduceResults<LinkedHashMap> reduceResults = mongoOperations.mapReduce(query, "order_info", mapStr, reduce, LinkedHashMap.class); Double score = 0D; for (LinkedHashMap map : reduceResults) { Map map2 = (Map) map.get("value"); score += (Double) map2.get("score"); } return score.intValue(); }
reduce函數中return的值須要跟map函數中key的數據結構一致。函數