Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:如何用一个命令更新多个文档?_Mongodb_Document_Nosql - Fatal编程技术网

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

MongoDB:如何用一个命令更新多个文档?,mongodb,document,nosql,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 我知道我可以循环并不断更新,直到它们全部被更改

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

> 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!'})

我已经创建了一种使用更好的界面来实现这一点的方法

  • db.collection.find({…}).update({…})
    --多重更新
  • db.collection.find({…}).replace({…})
    --单个替换
  • db.collection.find({…}).upsert({…})
    --单upsert
  • db.collection.find({…}).remove()
    --多重删除
您还可以通过预先链接更新和删除,对更新和删除应用限制、跳过、排序


如果您感兴趣,请从v3.3开始查看,您可以使用updateMany

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)
db.collection.updateMany(
,
,
{
插入:,
writeConcern:,
排序规则:,
阵列过滤器:[,…]
}
)
在v2.2中,更新函数采用以下形式:

 db.collection.update(
   <query>,
   <update>,
   { upsert: <boolean>, multi: <boolean> }
)
db.collection.update(
,
,
{upsert:,multi:}
)

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

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

感谢分享,我使用了2.6.7,下面的查询刚刚起作用

对于所有文档:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:true})
对于单个文档:

db.screen.update({stat:"PRO"} , {$set : {stat:"pro"}}, {multi:false})

我也遇到了同样的问题,我找到了解决办法,而且效果很好

只需将标志multi设置为true,如下所示:

 db.Collection.update(
                {_id_receiver: id_receiver},
               {$set: {is_showed: true}},
                {multi: true}   /* --> multiple update */
            , function (err, updated) {...});

我希望这有帮助:)

当您发出更新命令时,MongoDB将只找到一个与查询条件匹配的文档,无论哪个文档首先匹配,都会得到更新,即使有更多与条件匹配的文档会被忽略

所以为了克服这个问题,我们可以在update语句中指定“MULTI”选项,这意味着更新所有匹配查询条件的文档网。扫描集合中的所有文档,查找符合条件的文档并更新:

db.test.update({"foo":"bar"},{"$set":{"test":"success!"}}, {multi:true} )
你可以用

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "abc@gmail.com",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  `

在MongoDB客户端中,键入:

db.Collection.updateMany({}, $set: {field1: 'field1', field2: 'field2'})
3.2版中的新版本

参数::

{}:  select all records updated

关键字参数
multi
未使用

所有最新版本的mongodbupdateMany()都工作正常

db.getCollection('workers').updateMany({},{$set: {"assignedVehicleId" : "45680"}});

以下命令可以更新集合的多个记录

db.collection.update({}, 
{$set:{"field" : "value"}}, 
{ multi: true, upsert: false}
)

要更新整个集合

db.getCollection('collection_name').update({},
{$set: {"field1" : "value1", "field2" : "value2", "field3" : "value3"}},
{multi: true })

我不确定这一变化是什么时候发生的,但是Mongodb v2.2.2的做法有点不同。update(,),其中options是一组键值对。请参阅文档:如果要为不同的文档设置不同的值,该怎么办?有没有一种很好的方法可以做到这一点?如何对oldvalue+“some string”TypeError:db.getCollection(…).find(…).update不是一个函数:?没有工作
db.userActivity.find({'appId':1234,'status':1})。update({$set:{'status':1});2017-06-05T17:47:10.038+0530 E查询[thread1]类型错误:db.userActivity.find(…)。更新不是一个函数: