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

MongoDB事务更新2文档偶发WriteConflict及配置调整疑问

MongoDB 5.0.14 多文档事务偶发WriteConflict问题咨询

我在使用MongoDB 5.0.14版本时,通过事务仅更新2个文档,日志中却偶发出现以下错误:

MongoServerError: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.

根据查阅的文档,该问题通常在修改超过1000个文档时出现,但我仅操作2个文档,且错误为随机触发,多数情况下逻辑可正常执行。

相关代码如下:

exports.setArticleView = async (req, res) => {
  const userId = req.user._id;
  const { article_id } = req.body;

  // Start a session
  const session = await mongoose.startSession();

  try {
    // Start a transaction
    session.startTransaction();

    await ArticleView.create([{ articleId: article_id, user: userId }], { session });

    await Article.updateOne({ _id: article_id }, { $inc: { views: 1 } }, { session });

    // Commit the transaction
    await session.commitTransaction();

    return res.status(200).json({ success: true });
  } catch (error) {
    return res.status(500).json({ success: false });
  } finally {
    // End session
    session.endSession();
  }
};

我推测错误触发场景为:

  • 某用户浏览文章,事务启动;
  • 另一用户几乎同时浏览该文章,启动事务;
  • 因第一个事务未完成,第二个事务中止。

该推测基于官方文档中的这段描述:

如果存在正在进行的多文档事务,影响相同数据库或集合的新DDL操作会在事务之后等待。当存在这些待处理的DDL操作时,访问相同数据库或集合的新事务无法获取所需锁,等待maxTransactionLockRequestTimeoutMillis(默认值为5ms)后会中止。

我认为增大maxTransactionLockRequestTimeoutMillis参数可能解决问题,但想咨询社区:调整该配置会带来哪些潜在影响?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:55:11