我收到了以下文件
{
_id : 91,
"myArray" : [
{
"a" : "1",
"b" : true
},
{
"a" : "1",
"b" : true
},
{
"a" : "1",
"b" : true
}
]
}
现在我想将每个myArray.b
元素更新为false
,其中b
为true
。所以我正在运行以下查询:
db.MyDB.update({"arr.b" : true},{$set : {"arr.$.b":false}},false, true)
我只是更新了第一个数组元素而不是所有子文档。
{
_id : "91",
"myArray" : [
{
"a" : "1",
"b" : false
},
{
"a" : "1",
"b" : true
},
{
"a" : "1",
"b" : true
}
]
}
所有符合arr.b:true标准的子文档都应更新为arr.b = false
。
根据MongoDB大学的video,这种情况是可能的。
我不想使用JavaScript函数。
我缺少什么?感谢
答案 0 :(得分:2)
不幸的是,现在无法更新阵列中的所有文档 - 请参阅MongoDB JIRA票证Use positional operator to update all items in an array。
您可以手动更新每个文档:
db.MyDB.find({}).forEach(function(doc) {
doc.myArray.forEach(function(item) {
if (item.b === true)
item.b = false;
});
db.MyDB.update({ "_id": doc._id }, { "$set": { "myArray": doc.myArray }});
});