$set(设置字段)
最后更新:2026-10-09
$set(设置字段)
$set 是更新操作符,用于设置(或覆盖)文档中一个或多个字段的值。字段不存在时自动创建,可用点路径更新嵌套字段。它是 MongoDB 更新操作中最常用的操作符。`{ $set: { "price": 19.99, "inStock": true } }` 一次设置多个字段。
| 分类 | 更新字段 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $set: { <字段1>: <值1>, <字段2>: <值2>, ... } }
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $set:设置多个字段
db.products.updateOne(
{ _id: 1 },
{ $set: { price: 19.99, inStock: true } }
)
运行结果:
// 返回 updatedCount: 1,文档 price 变为 19.99、inStock 变为 true
📌 注意事项
- 与 MongoDB 5.0 前的 $set 语义一致(早期 $set 等价,7.0 起 $set 的数组语义有变化)
- 用 updateMany 可批量设置满足条件的所有文档
- $set 会覆盖已有字段,不会合并
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$set 和 $inc 能一起用吗?
A能。$set 设置/覆盖固定值,$inc 做增量运算,二者互不冲突,可出现在同一个更新文档中(同一字段除外)。
Q$set 和直接赋值 db.collection.update 有什么不同?
A$set 只更新指定字段,不影响文档其他字段;配合 $unset 可以精细控制。而直接替换整个文档需要 replaceOne,会丢失未声明的字段。
Q$set 会覆盖已有字段吗?
A会。$set 对已存在字段直接覆盖为新值,对不存在字段则新建。它是幂等的:重复执行相同 $set 结果不变。