首页 > 解决方案 > 如何在nodejs中循环事务

问题描述

我正在尝试使用 Fawn npm 模块在 mongoodb 中进行交易。我已经编写了下面的代码,它工作正常。但是如果 item 是一个有多个元素的数组,我该如何执行相同的操作。在这种情况下,我只需要保存一次订单,但需要多次更新库存。

我试图循环,但订单被保存了两次,我得到的错误是MongoError: E11000 duplicate key error collection: db.orders index因为我多次保存同一个订单。

try {
    new Fawn.Task()
      .save('orders', order)
      .update(
        'items',
        { _id: item[0]._id },
        { $inc: { stock: -+req.body.quantity[0] } }
      )
      .run();
  } catch (ex) {
    res.status(500).send('Something failed');
  }

其中 item 是我必须更新的所有项目 ID 的列表。

我想根据项目数组的大小多次更新订单和其他项目。

当我这样做时,它工作得非常好。但我希望它是动态的,因为我不知道数组的大小。

硬编码

标签: node.jsmongodbexpressmongoose

解决方案


您可以有条件地链接它,如下所示:

try {
  let task = new Fawn.Task()

  //
  task = task.save('orders', order)

  //
  for (let i in item) {
    task = task.update(
      'items', {
        _id: item[i]._id
      }, {
        $inc: {
          stock: - +req.body.quantity[i]
        }
      }
    )
  }

  task.run();

} catch (ex) {
  res.status(500).send('Something failed');
}

您可能想要添加验证。


推荐阅读