首页/数据/NoSQL 速查/findOneAndUpdate 原子读改写
本包目录(322 条)
MongoDB99 条
Elasticsearch89 条ClickHouse56 条时序与列式28 条选型与架构50 条

findOneAndUpdate 原子读改写

一步完成查找与更新并返回文档,适合领取队列任务、原子计数器等场景;排序决定哪条文档先被选中。

NoSQL 速查数据更新于 2026-10-12
常用选项sort / returnDocument(after|before) / upsert
对应命令findAndModify

领取一条任务

领取一条任务
db.tasks.findOneAndUpdate(
  { status: "queued" },
  { $set: { status: "running", worker: "w1", startAt: new Date() } },
  { sort: { priority: -1 }, returnDocument: "after" }
)
旧参数 returnOriginal: false 等价于 returnDocument: "after";并发下每个匹配文档只会被一个调用方取走。

易错点

  • 不写 sort 时选中哪条文档不确定,领取任务类场景必须显式排序
  • 返回的是执行时快照,后续判断要用返回值或重新查询,别混用旧数据

数据来源与参考

  • MongoDB Manual: db.collection.findOneAndUpdate()
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌