$map(对数组每个元素做变换)

最后更新:2026-10-09

$map(对数组每个元素做变换)

$map 遍历数组,把每个元素交给 in 表达式处理并收集结果,返回与输入等长的新数组。它是聚合表达式里最常用的函数式操作符,典型场景包括给订单商品统一加税、把字符串数组转大写、从对象数组提取字段。as 变量在 in 里用 $$变量名 引用,省略时可用 $$this。$map 不改变数组长度,只改变元素内容;与 $filter(删元素)、$reduce(归约)互补。

分类数组
MongoDB 版本1.0+
示例语言mongosh (Shell)

📝 语法

{ $map: { input: <数组>, as: <变量>, in: <表达式> } }

⚙️ 参数

input要遍历的数组。
as元素变量名,in 中用 $$变量名 引用;可选,默认 $$this。
in对每个元素求值的表达式,其结果组成新数组。

返回值:每个元素经 in 处理后的新数组;input 为 null 时返回 null

▶ 示例

请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):

// $map:把商品数量翻倍
db.orders.aggregate([
  { $project: {
      doubled: { $map: { input: '$items', as: 'it', in: { $multiply: ['$$it.qty', 2] } } }
  } }
])

运行结果:

{ '_id': 1, 'doubled': [ 4, 6 ] }
{ '_id': 2, 'doubled': [ 2 ] }

📌 注意事项

更多实战案例即将上线,敬请期待。

📚 相关教程

❓ 常见问题

Q$map 和 $filter 有什么区别?
A$map 对每个元素做变换、长度不变;$filter 按条件删元素、内容不变。两者可嵌套组合。
Q$map 能改变数组长度吗?
A不能,结果与输入等长。要变长度用 $filter 或 $reduce。
Qas 变量可以省略吗?
A可以,省略后在 in 里用 $$this 引用当前元素。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏