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的数据结构一致。函数