MongoDB:如何使用单个命令更新多个文档?
题
我惊讶地发现以下示例代码仅更新单个文档:
> 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)可用。
:从外壳你通过传递true
作为第四个参数来update()
,其中所述的第三个参数是UPSERT参数做一个多更新
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, false, true);
为2.2+需要设置的选项多真正的一次更新多个文档的MongoDB版本。
db.test.update({foo: "bar"}, {$set: {test: "success!"}}, {multi: true})
MongoDB的3.2+你也可以用新的方法updateMany()
更新一次多个文档,而无需单独multi
选项的版本。
db.test.updateMany({foo: "bar"}, {$set: {test: "success!"}})
其他提示
<强>更新为V2.2的,更新函数采用如下形式:强>
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
所选答案不再适用。
https://docs.mongodb.com/manual/reference /method/db.collection.update/
有关的蒙戈版本> 2.2 下,添加一个字段多并将其设置为真
db.Collection.update({query},
{$set: {field1: "f1", field2: "f2"}},
{multi: true })
我已经创建了一种通过更好的界面来做到这一点的方法。
db.collection.find({ ... }).update({ ... })
-- 多更新db.collection.find({ ... }).replace({ ... })
-- 单一替换db.collection.find({ ... }).upsert({ ... })
-- 单个更新插入db.collection.find({ ... }).remove()
-- 多重删除
您还可以通过预先链接更新和删除来应用限制、跳过、排序。
如果您有兴趣,请查看 蒙戈黑客
在客户端的MongoDB,类型:
db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
新版本3.2
PARAMS ::
{}: select all records updated
关键字参数multi
不采取
MongoDB中会发现,当你发出更新命令,无论文件符合第一碰巧得到更新,即使有相匹配的标准将被忽略更多的文件相匹配的查询条件只有一个匹配的文件。
所以要克服你的更新语句这一点,我们可以指定“MULTI”选项,这意味着更新所有那些符合查询条件documnets。扫描中收集寻找那些符合条件并更新所有documnets:
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
我有同样的问题,我发现该溶液中,它就像一个魅力
只是设置标志多为真这样的:
db.Collection.update(
{_id_receiver: id_receiver},
{$set: {is_showed: true}},
{multi: true} /* --> multiple update */
, function (err, updated) {...});
我希望帮助:)
可以use.`
Model.update({
'type': "newuser"
}, {
$set: {
email: "abc@gmail.com",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
}) `
的mongodb的所有最新版本的 updateMany()强>工作正常
db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});
感谢分享此,我使用2.6.7和下面的查询只是工作,
对于所有文档:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})
有单DOC:
db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})