我惊讶地发现以下示例代码只更新了一个文档:
> 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
我知道我可以循环并不断更新,直到它们全部改变,但这似乎非常低效。有没有更好的办法?
最近添加了多项更新,因此仅在开发版本 (1.1.3) 中可用。在 shell 中,您通过true将第四个参数传递给 来执行多重更新update(),其中第三个参数是 upsert 参数:
true
update()
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
对于 mongodb 2.2+ 的版本,您需要设置选项 multi true 以一次更新多个文档。
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
对于 mongodb 3.2+ 的版本,您还可以使用 new 方法updateMany()一次更新多个文档,而无需单独的multi选项。
updateMany()
multi
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})