Answers:
多更新是最近添加的,因此仅在开发版本(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!"}})
从v3.3开始,您可以使用updateMany
db.collection.updateMany(
<filter>,
<update>,
{
upsert: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
在v2.2中,更新功能采用以下形式:
db.collection.update(
<query>,
<update>,
{ upsert: <boolean>, multi: <boolean> }
)
https://docs.mongodb.com/manual/reference/method/db.collection.update/
我已经创建了一种使用更好界面的方法。
db.collection.find({ ... }).update({ ... })
-多次更新db.collection.find({ ... }).replace({ ... })
-一次更换db.collection.find({ ... }).upsert({ ... })
-单一更新db.collection.find({ ... }).remove()
-多删除您还可以通过预先链接限制,跳过,对更新和删除进行排序,删除。
如果您有兴趣,请查看Mongo-Hacker
db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
当您发出更新命令时,MongoDB只会找到一个与查询条件匹配的匹配文档,即使有更多符合条件的文档将被忽略,但最先匹配的文档也会被更新。
因此,为了克服这个问题,我们可以在您的更新语句中指定“ MULTI”选项,这意味着更新所有与查询条件匹配的文件。扫描集合中的所有documnet,找到与条件匹配的documnet,并更新:
db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
以下命令可以更新集合的多个记录
db.collection.update({},
{$set:{"field" : "value"}},
{ multi: true, upsert: false}
)
要更新整个收藏集,
db.getCollection('collection_name').update({},
{$set: {"field1" : "value1", "field2" : "value2", "field3" : "value3"}},
{multi: true })