如何在Node.js中循环进行交易

时间:2019-09-24 01:24:25

标签: node.js mongodb express mongoose

我正在尝试使用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的列表。

我想根据商品数组的大小单次更新其他商品的订单。

当我这样做时,它绝对可以正常工作。 但是我希望它是动态的,因为我不知道数组的大小。

hard coded code

2 个答案:

答案 0 :(得分:1)

您可以像下面这样有条​​件地链接它:

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');
}

您可能要添加验证。

答案 1 :(得分:0)

存在可以单独使用的减法运算符,而不是使用负值更新字段。 像下面一样

{$ subtract:{stock:req.body.quantity [i]}}

做参考check