You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB findOneAndUpdate并发执行时是否会同时匹配文档?

MongoDB并发执行findOneAndUpdate的原子性问题

场景说明

集合Schema定义:

{
    "_id": ObjectId,
    "status": String
}

初始数据文档:

{
    "_id": 1,
    "status": "waiting"
}

多线程并发执行的操作语句:

findOneAndUpdate({"_id": "1", "status": "waiting"}, {$set: { "status": "running"}})

问题解答

不会出现两个线程同时匹配到该文档的情况。

MongoDB的findOneAndUpdate是原子性操作,当第一个线程执行该语句时,MongoDB会对匹配到的目标文档加排他锁,在锁释放前,其他线程的同语句请求会处于等待状态。等第一个线程完成更新并释放锁后,文档的status已经变为running,此时其他线程的请求再匹配status: "waiting"的条件时,已经找不到符合要求的文档,因此不会返回更新后的结果。

你模拟1000个线程执行后只有一个线程输出文档的结果是正确的,这完全符合MongoDB原子操作的特性。

内容的提问来源于stack exchange,提问作者Grand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:08