如果想要使用 MongoDB 的事务操作,则必须开启副本集,请参考我的另一篇文章
MongoDB 的相关操作我使用的是 Typegoose,官网上介绍的是 “使用 TypeScript 类定义 Mongoose 模型”,具体使用方法请参考 Typegoose官网,有时间我会写一篇文章介绍。
/** 导入 Typegoose 模型 */
const model = TypegooseModel();
/** 获取事务实例, 并且一定要把实例配置到每个要操作数据库的方法配置里 */
const session = await model.startSession();
/** 开启事务 */
session.startTransaction();
/** 执行更新数据操作 */
const res = await model
.findOneAndUpdate({ _id: _id }, { name: '事务操作' })
.session(session);
if (res) {
/** 执行成功后提交事务,数据库保存成功的操作 */
/** 事务提交 */
await session.commitTransaction();
/** 事务关闭 */
await session.endSession();
} else {
/** 执行失败后回滚操作,数据库不做任何处理 */
/** 事务终止 */
await session.abortTransaction();
/** 事务关闭 */
await session.endSession();
}