$[](更新全部数组元素)
最后更新:2026-10-09
$[](更新全部数组元素)
$[] 位置操作符更新数组中所有元素。`{ $set: { 'grades.$[]': 90 } }` 把所有成绩改为 90。配合 arrayFilters 时更新满足条件的元素;不带 arrayFilters 时更新全部元素。$[] 不能出现在查询条件中(查询用 $elemMatch),只用于更新语句。
| 分类 | 更新修饰器 |
|---|---|
| MongoDB 版本 | 3.6+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ <更新操作符>: { '<数组字段>.$[]': <值> } }
⚙️ 参数
| 数组字段 | 要整体更新的数组字段名。 |
|---|---|
| 值 | 应用到每个元素的新值。 |
返回值:更新结果文档
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $[]:把所有成绩改为 90
db.students.updateOne(
{ _id: 1 },
{ $set: { 'grades.$[]': 90 } }
)
// 嵌套数组也用 $[]
// 逐层标记即可
db.students.updateOne(
{ _id: 1 },
{ $set: { 'scores.$[].math': 100 } }
)
运行结果:
// grades 全部变为 90;第二个示例把每个 score 对象的 math 设为 100
📌 注意事项
- 不带 arrayFilters 时更新全部元素
- 条件筛选用 $[标识符](配合 arrayFilters)而非 $[]
- 更新嵌套数组逐层写 $[]
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$[] 和 $ 有什么区别?
A$ 只更新第一个匹配元素;$[] 更新所有元素。
Q$[] 能配合条件吗?
A条件筛选需用 $[标识符](配合 arrayFilters);$[] 是无条件全部更新。
Q$[] 能用于查询吗?
A不能,只用于更新语句。