首页 > 解决方案 > 如何在 Mongoose 中用他的索引号更新数组

问题描述

我的用户模型有一个装有物品(数组)的购物车。我想检查他的购物车中的每件商品是否有足够的库存,如果没有,将购物车中的商品数量更新为可用库存(填充了 productId)。

   }                   
})

好吧,'cart.items[i].quantity' 太容易了,它不起作用:D

用户:[![在此处输入图像描述][1]][1]

产品:[![在此处输入图片描述][2]][2]

标签: node.jsmongodbmongoose

解决方案


这是您提供的代码。

user.cart.items.forEach((item, i) => {
   if (item.quantity > item.productId.stock) {
      User.findByIdAndUpdate(user._id, {'cart.items[i].quantity': item.productId.stock})
   }                   
})

从上面的代码我可以看到我们有productId要更新的项目。那么为什么在我们有索引的时候使用索引productId呢?无论如何,我已经根据您的屏幕截图创建了一个示例文档,并创建了一个更新quantity基于productId. 您可以转到 mongo playground 链接并运行查询并根据您的需要进行调整。

试试这个查询 -

db.collection.update({
  _id: 1
},
{
  "$set": {
    "cart.items.$[element].quantity": 2   /**where 2=item.productId.stock*/
  }
},
{
  arrayFilters: [
    {
      "element.productId": 100
    }
  ]
})

这里是Mongo游乐场

编辑 :

如果你仍然想用 index.

db.collection.update({
  _id: 1
},
{
  "$set": {
    "cart.items.1.quantity": 2/**where 1 is index and 2=item.productId.stock*/
    
  }
})

这里是游乐场


推荐阅读