Skip to content

MongoDB Map Reduce

概念

Map Reduce 是一种先 map(按键分组)、再 reduce(对同键的值做聚合)的批量计算模型。MongoDB 提供 mapReduce 命令,适合复杂聚合、历史数据分析等场景。

基本用法

javascript
db.orders.mapReduce(
  function() {
    emit(this.userId, this.amount);
  },
  function(key, values) {
    return Array.sum(values);
  },
  {
    out: "order_totals",
    query: { status: "completed" }
  }
)
  • map:对每条文档调用,emit(key, value) 输出键值对。
  • reduce:对同一 key 的 values 数组做聚合,返回一个结果值。
  • out:结果写入的集合(或内联返回)。
  • query:只对匹配的文档执行 map。

与聚合管道对比

特性Map Reduce聚合管道
灵活性可写复杂 JS 逻辑阶段与表达式固定
性能一般较慢,JS 执行通常更快,原生实现
维护脚本需维护易读易维护

多数统计、分组需求推荐优先用 聚合管道aggregate);只有聚合无法表达的逻辑再考虑 mapReduce。下一节介绍 MongoDB 全文检索