# MongoDB 中的事务

因为最近在开发中遇到了需要使用事务的地方,所以就在项目中实践了,如何使用事务。

# MongoDB 事务支持

在使用事务的过程中,发现了 MongoDB 如果要写事务的话,数据库必须要开启副本集,所以第一步是要开启副本集,但是我们使用的是单节点,所有集群化的配置,大家可以到网上去找一找,我这里是使用的单节点副本集,只是为了使用事务而已。

在启动数据库的时候,需要加上 --replSet rs0 代表开启了副本集,然后需要到数据库中执行 rs.initiate() 即可。

# 事务操作

比如,我们有两个数据库操作相关联,需要进行事务操作,那么我们可以这样写。

import * as mongoose from 'mongoose';

class OrderController extends Controller {
  async index() {
    const session = await mongoose.startSession();

    session.startTransaction();

    try {
      await OrderModel.create({}, session);

      await PayModel.update({}, session);

      await session.commitTransaction();
    } catch (err) {
      await session.abortTransaction();
    }

    session.endSession();
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21