MongoDB:updateOne与findAndModify的并发及性能疑问
MongoDB UpdateOne 与 FindAndModify 核心疑问解答
1. 查询完成后、更新执行前是否会有其他进程介入?
不会。UpdateOne 和 FindAndModify 都是原子性操作,MongoDB 会将查询匹配目标文档、执行更新的整个流程封装为一个不可拆分的单操作。
在操作执行期间,WiredTiger 存储引擎会对目标文档施加行级锁(旧版本 MMAPv1 为文档级锁),确保其他进程无法在这个间隙修改同一文档,完全避免了中间环节的并发介入问题。
2. 二者的性能是否存在差异?
存在细微差异,核心取决于是否需要返回修改后的文档:
- 若都不需要返回文档:两者性能几乎一致,底层执行逻辑相近,都是定位文档后执行更新。
- 若
FindAndModify需要返回修改后的文档(默认行为):会多一步文档序列化、数据回传的开销,相比UpdateOne(默认仅返回更新结果统计,如匹配数、修改数)会稍慢一些。
另外,当配置upsert: true时,FindAndModify可以直接返回新插入的文档,而UpdateOne仅返回是否完成插入的状态标识,这种场景下FindAndModify因额外的数据返回,性能也会略低于UpdateOne。
内容的提问来源于stack exchange,提问作者S-Wing
相关产品推荐
相关产品推荐

