MongoDB定位运算符$

时间:2014-03-19 23:04:44

标签: mongodb

我收到了以下文件

{
    _id : 91,
    "myArray" : [ 
        {
            "a" : "1",
            "b" : true
        }, 
        {
            "a" : "1",
            "b" : true
        }, 
        {
            "a" : "1",
            "b" : true
        }
    ]
}

现在我想将每个myArray.b元素更新为false,其中btrue。所以我正在运行以下查询:

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函数。

我缺少什么?感谢

1 个答案:

答案 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 }});
});