$[标识符](条件更新数组元素)

最后更新:2026-10-09

$[标识符](条件更新数组元素)

$[标识符] 位置操作符配合 arrayFilters 更新数组中满足条件的元素。`{ $set: { 'grades.$[elem]': 90 } }, { arrayFilters: [{ 'elem.grade': { $gte: 85 } }] }`。是数组条件更新的最灵活方式,MongoDB 3.6 引入。标识符在 arrayFilters 中定义,可针对嵌套文档字段匹配。

分类更新修饰器
MongoDB 版本3.6+
示例语言mongosh (Shell)

📝 语法

{ <更新操作符>: { '<数组字段>.$[<标识符>]': <值> } }, { arrayFilters: [ { '<标识符>.<字段>': <条件> } ] }

⚙️ 参数

数组字段要更新的数组字段名。
标识符arrayFilters 中定义的占位符,如 elem。
arrayFilters定义标识符匹配规则的条件数组。

返回值:更新结果文档

▶ 示例

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

// $[elem]:只更新成绩大于等于 85 的元素
// arrayFilters 定义 elem 的匹配规则
db.students.updateOne(
  { _id: 1 },
  { $set: { 'grades.$[elem]': 100 } },
  { arrayFilters: [{ 'elem': { $gte: 85 } }] }
)

运行结果:

// 只有大于等于 85 的成绩被改为 100,其余保持原值

📌 注意事项

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

📚 相关教程

❓ 常见问题

Q$[elem] 和 $[] 的区别?
A$[] 更新全部元素;$[elem] 配合 arrayFilters 只更新满足条件的元素。
QarrayFilters 怎么写?
A{ arrayFilters: [{ 'elem': { $gte: 85 } }] },标识符不加 $ 前缀。
Q能按嵌套字段条件更新吗?
A能,如 { 'elem.type': 'exam' }。
Web-Tutorial.com

Web-Tutorial 技术团队

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

100%

🙏 帮我们做得更好

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

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