MongoDB:在一个字段上更新每个文档


Answers:


458

无论您使用哪个版本,例如<update>

{  $set: { lastLookedAt: Date.now() / 1000 }  }

但是,根据您的MongoDB版本,查询看起来会有所不同。不管版本如何,关键是空条件{}将匹配任何文档。在Mongo Shell中,或与任何MongoDB客户端一起使用:

$ version> = 3.2

db.foo.updateMany( {}, <update> )
  • {} 是条件(空条件匹配任何文档)

3.2> $ version> = 2.2

db.foo.update( {}, <update>, { multi: true } )
  • {} 是条件(空条件匹配任何文档)
  • {multi: true} 是“更新多个文档”选项

$ version <2.2

db.foo.update( {}, <update>, false, true )
  • {} 是条件(空条件匹配任何文档)
  • false用于“ upsert ”参数
  • true 用于“ multi”参数(更新多个记录)


对于所有这些foo实例,它仍然给我提供了一个不正确的日期。运行后,我做了一个db.foo.findOne(),lastLookedAt是:1327691719186,它转换为jruby-1.6.5:011> Time.at(1327691719186)=> Sun Nov 16 02:19:46 -0500 44042
randombits 2012年

1
糟糕的是,POSIX时间使用秒,而Javascript时间使用毫秒。不过Date.now()/ 1000应该可以工作。您可能需要四舍五入。
菲利普·普朗捷

PSH它是空的{}那这样做是为了我,谢谢菲尔
乔纳

1
如何针对oldvalue +“某些字符串”执行此操作
Mahesh K

11

此代码将对您有所帮助

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

4

我已经使用MongoDB .NET驱动程序一个多月了。如果要使用.NET驱动程序,则可以在集合对象上使用Update方法。首先,我将构建一个查询,该查询将获取我感兴趣的所有文档,并对要更改的字段进行更新。Mongo中的更新仅影响第一个文档,并且要更新由查询产生的所有文档,则需要使用“多”更新标志。示例代码如下...

var collection = db.GetCollection("Foo");
var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs.
var update = Update.Set("timestamp", datetime.UtcNow);
collection.Update(query, update, UpdateFlags.Multi);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.