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

标签 mongodb document nosql

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

> 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/

相关文章:

mongodb - 面向文档的数据库是否适合此用例?

c# - 通过 BookSleeve 使用 Redis。未知参数

python - 是否可以在 Google App Engine 中使用 PyMongo?

javascript - Node.js - Mongoose - 使用 req.body 中的所有值更新嵌套数组

mongoDB - 基于返回结果数量的不同查询条件

ruby-on-rails - 使用 Ruby 或 RubyOnRails 连接到共享点服务器

javascript - 如何使用 jQuery 引用 <iframe> 的文档来获取其高度 ()?

java - 我需要使用 Java 创建搜索引擎的帮助

amazon-dynamodb - DynamoDB Multi-Tenancy - 分区键

mongodb - 如何在 MongoDB Map-reduce 映射函数中使用变量