多文档事务
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()