updateOne() - 更新单个文档
📑 目录
更新集合中第一个匹配筛选条件的文档。
语法
参数
filter (Object, 必需)
筛选条件,用于匹配要更新的文档。
update (Object, 必需)
更新操作,必须使用更新操作符(如 $set, $inc 等)。
支持的更新操作符:
$set- 设置字段值$unset- 删除字段$inc- 递增数值$mul- 乘以数值$push- 添加数组元素$pull- 删除数组元素$addToSet- 添加唯一数组元素- 等等...
options (Object, 可选)
操作选项。
返回值
返回 Promise<UpdateResult> 对象:
注意:
matchedCount可能大于modifiedCount(匹配但值相同时不修改)- 未匹配时
matchedCount和modifiedCount都为 0
示例
基本更新
递增计数器
数组操作
多个操作符组合
更新嵌套字段
删除字段
使用 upsert
条件更新
使用注释(便于日志追踪)
错误处理
常见错误
错误:缺少更新操作符
说明: updateOne 用于部分更新,必须使用更新操作符。如果需要完整替换文档,请使用 replaceOne。
错误:filter 参数无效
性能建议
1. 使用索引优化筛选
2. 避免全表扫描
3. 批量更新使用 updateMany
缓存行为
updateOne 在成功修改文档后会自动失效相关缓存:
注意:
- 仅当
modifiedCount > 0时才会失效缓存 - 缓存失效是自动的,无需手动调用
慢查询日志
当操作耗时超过阈值时,会自动记录慢查询日志:
与其他方法的对比
最佳实践
1. 总是使用更新操作符
2. 使用 $setOnInsert 配合 upsert
3. 添加注释便于追踪
4. 验证更新结果
相关方法
updateMany()- 批量更新多个文档replaceOne()- 完整替换单个文档findOneAndUpdate()- 原子地查找并更新insertOne()- 插入单个文档