mongoose 更新两个嵌套对象数组中的对象的值

erhoui1w  于 2023-03-30  发布在  Go
关注(0)|答案(1)|浏览(152)

以下是Products集合架构的简短摘要:

{   
    id,
    variations: [{
        id,
        lots: [{
            quantity,
            size
        }]
    }] 
}

我需要根据以下内容修改单个批次的数量:例如,product.id、variation.id和lot.size.
我该怎么做呢?
我尝试使用此代码,但它没有编辑整个集合的任何字段

Product.updateOne(
      {
        _id: variation.productId,
        "variations._id": variation.variationId,
        "variations.lots.size": variation.size,
      },
      { $inc: { "variations.lots.$.quantity": -variation.quantity } }
    );
wj8zmpe1

wj8zmpe11#

您应该在MongoDB updateOne操作中使用arrayFilters功能。
来自文档:
可选。筛选器文档的数组,用于确定对数组字段执行更新操作时要修改的数组元素。在更新文档中,使用$[]筛选的位置运算符定义标识符,然后在数组筛选器文档中引用该标识符。如果标识符未包含在更新文档中,则不能为该标识符创建数组筛选器文档。
下面是一个最终的工作查询:

db.collection.update({
  "_id": "p001"
},
{
  $inc: {
    "variations.$[v].lots.$[l].quantity": -1
  }
},
{
  arrayFilters: [
    {
      "v.id": "v002"
    },
    {
      "l.size": "S"
    },
    
  ]
})

这里有一个链接到MongoDBPlayground,可以看到这个查询的工作:https://mongoplayground.net/p/UAz_Hmg0Z5t

相关问题