我有一个集合,其中包含这样的对象。
{
materials: {
"m1": {
inventory: [
{
price: 100,
amount: 65
}
]
}
}
}
正如您所看到的,库存是层次结构中深嵌的一个数组。我想要更新它的amount
字段。
从客户端收到物料id("m1"
)和库存索引(0
)。
我必须使用更新管道,因为我在此文档中设置和取消设置一些其他字段。
这是我尝试过的:
await products.findOneAndUpdate(filters, [
{
$set: {
"materials.m1.inventory.0.amount": 100,
},
},
]);
但是它会在第一个元素内创建一个名为0的新字段,并设置该对象中的
amount
。因此,生成的文档如下所示。{
materials: {
"m1": {
inventory: [
{
0: {
amount: 100
}
price: 100,
amount: 65
}
]
}
}
}
我需要的是:
{
materials: {
"m1": {
inventory: [
{
price: 100,
amount: 100
}
]
}
}
}
我能够识别需要更新的数组元素只有它的索引。
我正在使用nodejs mongodb驱动程序。如何编写更新管道的$set
阶段?
$mergeObjects
在这里派上了用场。 - Marco Luzzara