如何在 Mongoose 中使用 Transactions 控制数据事务
在 Mongoose 中,我们可以设置事务来保证所有数据库的更新操作要么全部成功要么全部失败,以确保数据的一致性。同时,由于 MongoDB 不支持跨集合事务,因此在 Mongoose 中的事务仅限于单个集合内的操作。
实现事务的步骤:
- 开启事务
使用 session.startTransaction()
函数开启一个事务,这个函数会返回一个 Mongoose session 对象,我们需要将这个对象传递给所有需要进行事务的函数。
const session = await mongoose.startSession() session.startTransaction()
- 进行事务操作
在事务操作中,我们需要使用 session 对象进行数据读写。注意:即使在是 修改操作时也需要使用 findOne
回调函数返回的对象中的 _id
这个变量,否则事务会出现错误。
-- -------------------- ---- ------- ----- ------- - ----- ----------------------- -------------------------- --- - ----- ---- - ----- -------------- ---- -- ------------------- --------------------- ----- ----------- ----- ------- - ----- -------------- ---- --------- ------------------- -------------- - ---------- ----- -------------- ----- --------------------------- -------------------- - ----- ------- - ----- -------------------------- -------------------- ------ ----- -
- 提交或回滚事务
在执行完所有的事务操作后,我们需要使用 session 对象内置的 commitTransaction()
函数来提交或使用 abortTransaction()
回滚事务。
await session.commitTransaction() session.endSession()
完整代码示例:
-- -------------------- ---- ------- ----- -------- - ------------------- ----- ---- - ------------------------ ----- ---- - ------------------------ ----- -------- -------------- ----- ---------- - ----- ------- - ----- ----------------------- -------------------------- --- - ----- ---- - ----- -------------- ---- -- ------------------- --------------------- ----- ----------- ----- ------- - ----- -------------- ---- --------- ------------------- -------------- - ---------- ----- -------------- ----- --------------------------- -------------------- - ----- ------- - ----- -------------------------- -------------------- ------ ----- - ------ ---- -
总结
在 Mongoose 中使用 Transactions 控制数据事务,能避免数据操作的不一致性,确保数据的正确性和有效性。同时,由于 MongoDB 的限制,事务操作仅限于单个集合操作。上述示例仅仅是一份样例代码,建议在实际使用中根据实际的需求进行适当的改动。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/654cdbaf7d4982a6eb62daf8