MongoDB事务处理
掌握多文档事务的ACID特性,确保数据一致性。 · 难度:入门 · +15XP
MongoDB 事务
从 MongoDB 4.0 起支持多文档事务(副本集),4.2 扩展至分片集群。事务保证多个操作的原子性:要么全部成功,要么全部回滚。
核心概念
- Session:事务的上下文
- 事务选项:readConcern, writeConcern, readPreference
- 提交与中止:commitTransaction / abortTransaction
示例:转账操作
const session = client.startSession();
try {
session.startTransaction();
const accounts = db.collection('accounts');
await accounts.updateOne(
{ _id: 'A' },
{ $inc: { balance: -100 } },
{ session }
);
await accounts.updateOne(
{ _id: 'B' },
{ $inc: { balance: 100 } },
{ session }
);
await session.commitTransaction();
console.log('转账成功');
} catch (err) {
await session.abortTransaction();
console.log('转账失败,回滚');
} finally {
session.endSession();
}表格:事务选项
| 选项 | 说明 | 默认值 |
|---|---|---|
| readConcern | 读隔离级别 | snapshot |
| writeConcern | 写确认级别 | majority |
练习提示: 创建一个包含两个账户的集合,模拟转账场景,故意在第二步前抛出异常,观察回滚效果。