跨集合事务中隔离级别对读关注点的实际影响
详细解释 MongoDB 多文档事务中 readConcern 与 writeConcern 的交互机制,以及如何通过配置不同隔离级别来解决脏读、不可重复读和幻读问题。 · 难度:入门 · +10XP
跨集合事务中隔离级别对读关注点的实际影响
MongoDB 4.0+ 支持多文档事务,但默认的 readConcern 为 'snapshot' 并不总能满足所有业务需求。本教程通过模拟库存扣减与订单创建两个集合的并发场景,演示当使用 'local','majority' 或 'snapshot' 时可能出现的数据不一致现象。你还能学到如何利用 abortTransaction 回滚部分操作,并理解 writeConcern 的 'majority' 如何影响事务的持久性。
const session = client.startSession();
session.startTransaction({
readConcern: { level: 'snapshot' },
writeConcern: { w: 'majority' }
});
try {
db.collection('inventory').updateOne({ _id: 1 }, { $inc: { stock: -1 } }, { session });
db.collection('orders').insertOne({ item: 'A', qty: 1 }, { session });
await session.commitTransaction();
} catch (e) {
await session.abortTransaction();
} finally {
session.endSession();
}