以下是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 } }
);
1条答案
按热度按时间wj8zmpe11#
您应该在MongoDB
updateOne
操作中使用arrayFilters
功能。来自文档:
可选。筛选器文档的数组,用于确定对数组字段执行更新操作时要修改的数组元素。在更新文档中,使用$[]筛选的位置运算符定义标识符,然后在数组筛选器文档中引用该标识符。如果标识符未包含在更新文档中,则不能为该标识符创建数组筛选器文档。
下面是一个最终的工作查询:
这里有一个链接到MongoDBPlayground,可以看到这个查询的工作:https://mongoplayground.net/p/UAz_Hmg0Z5t