我在MongoDb中有这条记录,并且正在使用原生API:
{
"_children" : {
"addressesR" : [
{
"id" : ObjectId("530eea01071bd1a53065c1a6"),
"personId" : ObjectId("530eea01071bd1a53065c1a4"),
"street" : "ivermey",
"city" : "perth",
"_children" : {
}
},
{
"_children" : {
"configId" : {
"a" : {
"_children" : [
{
"b" : 10
},
{
"b" : 20
}
]
}
}
},
"city" : "perth",
"configId" : ObjectId("530eea01071bd1a53065c1a3"),
"id" : ObjectId("530eea01071bd1a53065c1a5"),
"personId" : ObjectId("530eea01071bd1a53065c1a4"),
"street" : "bitton"
}
],
}
}
我需要在一次查询中将嵌套的 'b' 更新为 30。 我可以找到这条记录:
db.peopleR.find( { '_children.addressesR._children.configId.a._children.b': 20 } );
但是我很难找到一种更新该特定值的方法。
我正在尝试:
db.peopleR.update( { '_children.addressesR._children.configId.a._children.b': 20 }, { $set: { '_children.addressesR.$._children.configId.a.$._children.b': 30 } } )
但是我得到的结果是:
Cannot apply the positional operator without a corresponding query field containing an array.
现在,考虑到其他限制条件,我绝对需要仅更新“b”,有没有办法让我这样做?或者说,$操作符不能使用两次吗?(也就是说,如果只有一级下的对象,则只能更新其内部部分?)