MongoDB 文档修改命令
一、基本语法
db.集合名.updateOne(过滤条件, 修改内容) // 修改第一条匹配的文档
db.集合名.updateMany(过滤条件, 修改内容) // 修改所有匹配的文档
db.集合名.replaceOne(过滤条件, 新文档) // 替换整条文档二、常用修改操作符
| 操作符 | 作用 |
|---|---|
$set | 修改或新增字段 |
$unset | 删除字段 |
$inc | 数字字段自增/自减 |
$rename | 重命名字段 |
$push | 向数组字段追加元素 |
$pull | 从数组字段删除元素 |
三、示例
修改单条文档
db.users.updateOne(
{ name: "张三" }, // 过滤条件:找到 name 为张三的文档
{ $set: { age: 20 } } // 将 age 改为 20
)修改多条文档
db.users.updateMany(
{ age: { $lt: 18 } }, // 过滤条件:age 小于 18
{ $set: { status: "未成年" } }
)数字自增
db.users.updateOne(
{ name: "张三" },
{ $inc: { age: 1 } } // age 加 1,填负数则减
)删除字段
db.users.updateOne(
{ name: "张三" },
{ $unset: { status: "" } } // 删除 status 字段
)替换整条文档
db.users.replaceOne(
{ name: "张三" },
{ name: "张三", age: 25, city: "北京" } // 原文档被完全替换
)四、updateOne 和 replaceOne 的区别
| updateOne | replaceOne | |
|---|---|---|
| 作用 | 只修改指定字段 | 替换整条文档 |
| 未提及的字段 | 保留 | 删除 |
五、常见问题
Q:$set 的字段原来不存在会怎样?
A:会自动新增这个字段。
Q:updateMany 没有匹配到任何文档会报错吗?
A:不会报错,返回 matchedCount: 0 表示没有匹配到。