我有一个包含诸如此类的对象的集合。
{
materials: {
"m1": {
inventory: [
{
price: 100,
amount: 65
}
]
}
}
}
如您所见,库存是层次结构深处的一个数组。我想更新amount
它的领域。
我从客户端收到材料 ID ( "m1"
) 和库存索引 ( 0
)。
我必须使用更新管道,因为我正在设置和取消设置本文档中的其他一些字段。
这是我尝试过的:
await products.findOneAndUpdate(filters, [
{
$set: {
"materials.m1.inventory.0.amount": 100,
},
},
]);
但它会在第 0 个元素内创建一个名为 0 的新字段,并设置该amount
对象的内部。所以生成的文档看起来像这样。
{
materials: {
"m1": {
inventory: [
{
0: {
amount: 100
}
price: 100,
amount: 65
}
]
}
}
}
而我想要的是:
{
materials: {
"m1": {
inventory: [
{
price: 100,
amount: 100
}
]
}
}
}
我确定要更新数组中哪个元素的唯一方法是它的索引。
我正在使用 nodejs mongodb 驱动程序。如何编写$set
此更新管道的阶段?