mongodb replace all instances of certain value for subdocument -
my collection (called "workers"):
"_id" : "500" "type" : "manager", "employees" : [{ "name" : "bob" "id" : 101 },{ "name" : "phil" "id" : 102 }] goal: every _id type: manager , contains subdocument has "id" of 102: replace 102 202.
desired end result:
"_id" : "500" "type" : "manager", "employees" : [{ "name" : "bob" "id" : 101 },{ "name" : "phil" "id" : 202 }] i have tried:
db.workers.update({type:'manager','employees.id':'102'},{$set:{'employees.id':'202'}},{multi:true}) i did following 2 things verify:
db.workers.find({type: "manager", 'employees.id': 102}).count() i result of 9.
i tried verify:
db.workers.find({$and: [{type: "manager"},{"employees.id":60}]}).count() this returned 0.
i pretty confused @ point. update wrong? find wrong? both? '9' result wrong? '0' wrong?
you need use $ positional update operator update specific element matched query. update using values of '102' , '202' makes update try , match strings when fields numbers.
your update should instead:
db.workers.update( {type: 'manager', 'employees.id': 102}, {$set: {'employees.$.id': 202}}, {multi: true})
Comments
Post a Comment