我惊讶地发现下面的示例代码只更新了一个文档:
> 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 参数:
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+ 的版本,您还可以使用新方法 updateMany()
一次更新多个文档,而无需单独的 multi
选项。
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
关于MongoDB:如何使用单个命令更新多个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740023/