MongoDB 聚合之 MapReduce
理解聚合
在关系型数据库中,聚合是根据数据记录的某个字段对数据记录进行合并。比如需要从订单明细表统计每个订单的金额,通常需要经过下面几个步骤:
- 从订单明细表提取每条记录的订单号和金额;
- 根据订单号对金额分组,使每组金额具有相同的订单号;
- 对每组金额进行求和运算,结果按 订单号-总金额 格式返回;
理解 MapReduce
在 MapReduce 中,map 函数所做的包括了上述过程的前两步,其中 emit 函数负责第一步的实现。map 函数最终返回的结果是多个 Key-Values 集合,注意:这里一个键对应多个值,也就是前面说的一个订单号对应多个金额。
接下来,map 的返回值作为 reduce 函数的参数,由 reduce 对每组数据进行合并,也就是上述过程的第三步求和。