需要创建一个mongoose事务包装器,该包装器将会话作为参数传递给实际执行查询操作以创建或更新的函数



因此,假设我有一个负责用户创建的函数,以前我们可以使用它。现在我们只希望该函数以一个事务的形式工作,如果成功或失败,当它遇到任何错误时,它会将所有用户一起创建。我假设只将会话从事务包装器传递给现有函数就可以处理这一问题。任何数量的此类函数都可以一起传递,包装器应该将它们全部作为一个事务处理。

const createUsers = async (users = []) => {
try {
return UserModel.create(users).then((res) => {
logger.info(`[Start-Up] Created ${res.length} users`);
}, (rej) => {
logger.error(`[Start-Up] Failed to create users - ${rej}`);
throw new Error(rej);
});
} catch (err) {
throw new Error('Failed to create Users', err);
}
};

使用https://www.npmjs.com/package/mongoose-transactions


https://mongoosejs.com/docs/transactions.html

const createUsers = async (users = []) => {
const session = await UserModel.startSession();
try {
await session.withTransaction(() => {
return UserModel.create(users, { session: session }).then((res) => {
logger.info(`[Start-Up] Created ${res.length} users`);
}, (rej) => {
logger.error(`[Start-Up] Failed to create users - ${rej}`);
throw new Error(rej);
});
});
} catch (err) {
throw new Error('Failed to create Users', err);
} finally {
session.endSession();
}
};

最新更新