$reduce(对数组元素做归约)
最后更新:2026-10-09
$reduce(对数组元素做归约)
$reduce 把数组归约为单个值,是聚合表达式里的折叠操作,等价于函数式编程的 reduce/fold。它需要 initialValue 初始值和 in 归约表达式,in 里 $$value 表示累加结果、$$this 表示当前元素。典型场景包括数组求和、拼接字符串、统计满足条件的元素个数。空数组直接返回 initialValue。$reduce 比 $sum/$concat 更通用,能表达任意累积逻辑。
| 分类 | 数组 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $reduce: { input: <数组>, initialValue: <初始值>, in: <归约表达式> } }
⚙️ 参数
| input | 要归约的数组。 |
|---|---|
| initialValue | 累加器的初始值。 |
| in | 归约表达式,$$value 为当前累加结果,$$this 为当前元素。 |
返回值:归约后的单个值;空数组返回 initialValue;input 为 null 时返回 null
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $reduce:求数组总和
db.stats.aggregate([
{ $project: {
total: { $reduce: { input: '$scores', initialValue: 0, in: { $add: ['$$value', '$$this'] } } }
} }
])
运行结果:
{ '_id': 1, 'total': 285 }
📌 注意事项
- in 里 $$value 是累加器、$$this 是当前元素,两者都是内置变量
- 空数组返回 initialValue,不会报错
- initialValue 的类型决定返回类型,例如初始 0 返回数字、初始空字符串返回字符串
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$reduce 能实现数组求和吗?
A能,initialValue 设 0,in 里用 { $add: ['$$value', '$$this'] }。纯数字数组也可直接用 $sum。
Q空数组会怎样?
A直接返回 initialValue,不会报错。
Q$$value 和 $$this 是什么?
A$$value 是累积到当前的结果,$$this 是正在处理的元素,只在 $reduce 的 in 里可用。