$[标识符](条件更新数组元素)
最后更新: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,其余保持原值
📌 注意事项
- arrayFilters 中的标识符不带 $ 前缀
- 支持嵌套文档与多字段条件
- 不能与 $ 和 $[] 混用在同一更新路径
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$[elem] 和 $[] 的区别?
A$[] 更新全部元素;$[elem] 配合 arrayFilters 只更新满足条件的元素。
QarrayFilters 怎么写?
A{ arrayFilters: [{ 'elem': { $gte: 85 } }] },标识符不加 $ 前缀。
Q能按嵌套字段条件更新吗?
A能,如 { 'elem.type': 'exam' }。