我们可以将多个updateOne转换为单个查询吗?

时间:2018-10-20 22:45:28

标签: javascript mongodb mongoose

我有一个像这样的数组orderProducts

orderProducts = [
  {_id: _id, color: 'blue', quantity: '2'},
  {_id: _id, color: 'red', quantity: '4'},
  ...
];

我有这个查询循环,可以执行我需要做的事情,找到文档并减去数量。

我想知道是否可以将这种操作归为一个查询

编辑:我只想向数据库发送一个查询,所以如果其中一个查询失败,一切都会失败

// Working example of the operation i need to do
await Promise.all(
  orderProducts.map(
    product => Product.findOneAndUpdate(
      { _id: product._id, 'colors.color': product.color },
      { $inc: { 'colors.$.quantity': -product.quantity } },
      { new: true },
    ),
  ),
);

1 个答案:

答案 0 :(得分:0)

const orderProducts = [
  {_id: 1, color: 'blue', quantity: '2'},
  {_id: 2, color: 'red', quantity: '4'},
  {_id: 3, color: 'red', quantity: '3'},
  {_id: 4, color: 'green', quantity: '4'},
  {_id: 5, color: 'red', quantity: '3'},
];

const run = async () => {
  const output = await Promise.all(orderProducts.map(async (product) => {
    const result = await Product.findOneAndUpdate(
      { _id: product._id, 'colors.color': product.color },
      { $inc: { 'colors.$.quantity': -product.quantity } },
      { new: true }
    )

    return result
  }))
  
  console.log(output)
}

run()