MongoDB: How to update multiple documents with a single command?
document, mongodb, nosql
Solution
Multi update was added recently, so is only available in the development releases (1.1.3). From the shell you do a multi update by passing `true` as the fourth argument to `update()`, where the the third argument is the upsert argument:
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
For versions of mongodb 2.2+ you need to set option multi true to update multiple documents at once.
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
For versions of mongodb 3.2+ you can also use new method `updateMany()` to update multiple documents at once, without the need of separate `multi` option.
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
Problem
I was surprised to find that the following example code only updates a single document: ``` > db.test.save({"_id":1, "foo":"bar"}); > db.test.save({"_id":2, "foo":"bar"}); > db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}}); > db.test.find({"test":"success!"}).count(); 1 ``` I know I can loop through and keep updating until they're all changed, but that seems terribly inefficient. Is there a better way?