node.js - 以编程方式取消 MongoDB 事务

标签 node.js mongodb

我正在使用 MongoDB 事务,如下例所示,我想知道是否有办法以编程方式取消更新事务,以防以下步骤失败。

  const session = client.startSession();

  try {
    await session.withTransaction(async () => {

      await coll1.insertOne({ abc: 1 }, { session });
      await coll2.insertOne({ xyz: 999 }, { session });
    }, transactionOptions);

      // Now that the DB is updated, I'll try to use a service
      const result = paymentProcessor.chargeCard(billingDetails, 200);
      if(result.error) **cancelTransactionAndRestoreEvery();**

  } finally {
    await session.endSession();
    await client.close();
  }

最佳答案

您可以使用 session.abortTransaction() 中止事务,以便回滚事务中已发生的所有内容。

参见http://mongodb.github.io/node-mongodb-native/3.5/api/ClientSession.html#abortTransaction对于官方文档。

参见https://www.mongodb.com/blog/post/quick-start-nodejs--mongodb--how-to-implement-transactions例如使用 abortTransaction() 的代码。

关于node.js - 以编程方式取消 MongoDB 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59897708/

相关文章:

mongodb - Robomongo & Meteor mongodb 本地主机连接失败

windows - 单元测试和启动 MongoDb 服务器

java - 使用 hibernate OGM 为 mongoDB 启用 SSL

mongodb - 从 Db 中删除 doc 后存储空间没有减少。为什么?

javascript - 云代码函数未使用 Parse 服务器开源 API 执行

node.js - MongoDB - 路径 "create"处的值 "_id"转换为 ObjectId 失败

javascript - 数组中带有权重的随机数

javascript - 如何为模块编写 Typescript 类定义

JavaScript forEach() 调试 : code review?

Node.js Redis 获取 HashMap 中的所有值