小编典典

MongoDB:如何使用单个命令更新多个文档?

all

我惊讶地发现以下示例代码只更新了一个文档:

> 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

我知道我可以循环并不断更新,直到它们全部改变,但这似乎非常低效。有没有更好的办法?


阅读 102

收藏
2022-07-28

共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+ 的版本,您还可以使用 new 方法updateMany()一次更新多个文档,而无需单独的multi选项。

db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
2022-07-28