当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《MongoDB:如何使用单个命令更新多个文档?》经验,为你挑选了4个好方法。

我惊讶地发现以下示例代码仅更新单个文档:

> 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> mdirolf..:

最近添加了多个更新,因此仅在开发版本(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 v2.2.2的确有点不同.db.collection.update(,,)其中options是一组键值对.参见文档:http://docs.mongodb.org/manual/applications/update/
如果我想为不同的文件设置不同的值怎么办?有这样一种方式吗?

2> user602525..:

自V2.2起更新,更新函数采用以下形式:

db.collection.updateMany(
   ,
   ,
   {
     upsert: ,
     writeConcern: ,
     collation: ,
     arrayFilters: [ , ... ]
   }
)

所选答案不再适用.

https://docs.mongodb.com/manual/reference/method/db.collection.update/



3> Kartik Singh..:

对于Mongo版本> 2.2,添加一个字段multi并将其设置为true

db.Collection.update({query}, 
                 {$set: {field1: "f1", field2: "f2"}},
                 {multi: true })



4> Tyler Brock..:

我用更好的界面创建了一种方法.

db.collection.find({ ... }).update({ ... }) - 多次更新

db.collection.find({ ... }).replace({ ... }) - 单次更换

db.collection.find({ ... }).upsert({ ... }) - 单个插入

db.collection.find({ ... }).remove() - 多删除

您还可以对更新应用限制,跳过,排序,并通过预先链接将其删除.

如果您有兴趣,请查看Mongo-Hacker

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有