假设数据库中有这样的对象:
{
_id: <...>,
arrayOfObjects: [
{
criteria: "one",
value: 5
},
{
criteria: "two",
value: 5
},
{
criteria: "three",
value: 5
},
{
criteria: "four",
value: 5
},
]
}
我想做的是运行类似于以下内容的更新:
{
$inc: {
"arrayOfObjects.2.value" : -1
}
}
但是我需要它只影响某些元素,例如 {$or: [{criteria: "one"}, {criteria: "three"}]} 我不能依赖数组索引,因为我拥有的对象副本可能在执行更新(可以在数组中插入、删除、重新排列对象)。
有可能做到这一点吗?这样做的最佳方法是什么?