rmdir.cn

多文档事务

ACID 多文档事务操作

语法

session.startTransaction(); ... session.commitTransaction() / session.abortTransaction()

说明

MongoDB 4.0+ 支持副本集多文档事务,4.2+ 支持分片集群事务。事务保证跨多个文档和集合的 ACID 操作。通过 session 对象控制事务的开始、提交和回滚。适用于需要数据一致性的复杂业务场景。

参数

  • startSession()必填

    创建客户端会话

  • startTransaction()必填

    开启事务,支持 readConcern/writeConcern 选项

  • commitTransaction()必填

    提交事务,持久化所有操作

  • abortTransaction()必填

    回滚事务,撤销所有操作

  • withTransaction()

    自动处理重试的便捷事务 API (Driver)

示例

事务基本用法

开始、提交事务

const session = db.getMongo().startSession() const coll = session.getDatabase("mydb").orders session.startTransaction() try { coll.insertOne({ _id: 1, item: "A", qty: 2 }) db.inventory.updateOne({ _id: "A" }, { $inc: { stock: -2 } }) session.commitTransaction() } catch (e) { session.abortTransaction() } finally { session.endSession() }

跨集合事务

订单与库存原子操作

session.startTransaction({ readConcern: { level: "snapshot" }, writeConcern: { w: "majority" } }) // 执行多个集合的操作... session.commitTransaction()