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

MongoDB事务更新在提交前是否会在数据库中生效?

MongoDB事务提交前的更新能否被查询到?

答案要分场景判断,核心取决于查询是否属于同一个事务会话以及读关注点(readConcern)的设置:

1. 同一个事务会话内的查询

如果查询和更新操作共用同一个事务会话(即使用同一个session对象),哪怕事务还未提交,你也能看到本次事务内的更新结果。比如你代码里执行insertOne后,用同一个session查询coll1,就能查到刚插入的文档。

2. 其他会话的查询

对于不属于当前事务会话的外部查询,默认情况下看不到未提交的事务更新,仅在特定条件下例外:

  • 若外部查询的读关注点设置为local或available,且MongoDB使用的存储引擎支持读未提交(如WiredTiger的特定场景),才可能读到未提交的脏数据,但这不是默认行为,生产环境不推荐使用。
  • 绝大多数生产场景下,默认读关注点为local,未提交的事务更新对外部会话完全不可见,直到事务成功提交。

结合你的示例代码说明

在你提供的代码逻辑中:

await coll1.insertOne({user_id: 12344, paid: true }, { session });
// 此时用同一个session查询coll1,能看到这条新插入的文档
// 但其他客户端/独立会话查询时,看不到这条文档,直到事务完成提交

只有当session.withTransaction内的所有逻辑执行完毕、事务成功提交后,外部会话才能查询到本次insertOne的结果。如果事务中途失败或被中止,该插入操作会被回滚,任何会话都无法看到这条数据。


内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:23:10