Appearance
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 全文检索。