代码之家  ›  专栏  ›  技术社区  ›  Asaf Aviv

我们能把多个updateOne转换成一个查询吗?

  •  0
  • Asaf Aviv  · 技术社区  · 7 年前

    我有一个数组 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 回复  |  直到 7 年前
        1
  •  0
  •   Piterden    7 年前

    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()