MongoDB:更新一个字段上的每个文档
假设我有一个名为MongoDB:更新一个字段上的每个文档,mongodb,Mongodb,假设我有一个名为foo的集合 foo的每个实例都有一个名为lastLookedAt的字段,该字段是自epoch以来的UNIX时间戳。我希望能够通过MongoDB客户端,将所有现有文档(大约20000个)的时间戳设置为当前时间戳 处理此问题的最佳方法是什么?无论版本如何,例如,都是: {$set:{lastLookedAt:Date.now()/1000} 但是,根据您的MongoDB版本,查询看起来会有所不同。无论版本如何,关键是空条件{}将匹配任何文档。在Mongo shell中,或使用任何
foo
的集合
foo
的每个实例都有一个名为lastLookedAt的字段,该字段是自epoch以来的UNIX时间戳。我希望能够通过MongoDB客户端,将所有现有文档(大约20000个)的时间戳设置为当前时间戳
处理此问题的最佳方法是什么?无论版本如何,例如,
都是:
{$set:{lastLookedAt:Date.now()/1000}
但是,根据您的MongoDB版本,查询看起来会有所不同。无论版本如何,关键是空条件{}
将匹配任何文档。在Mongo shell中,或使用任何MongoDB客户端:
:
db.foo.updateMany({},)
是条件(空条件匹配任何文档){}
db.foo.update({},{multi:true})
是条件(空条件匹配任何文档){}
是“更新多个文档”选项{multi:true}
true
用于“multi”参数(更新多条记录)我已经使用MongoDB.NET驱动程序一个多月了。如果我使用.NET驱动程序,我会对集合对象使用更新方法。首先,我将构造一个查询,获取我感兴趣的所有文档,并对我要更改的字段进行更新。Mongo中的更新只会影响第一个文档要更新查询产生的所有文档,需要使用“Multi”更新标志
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);
此代码将对您有所帮助
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.collection.updateMany(filter, update, options)
有关更多文档,请参阅
根据您的要求,更新代码如下:
User.updateMany({"created": false}, {"$set":{"created": true}});
您需要在此处使用,因为您只想将created从true更改为false。参考。如果您想更改整个文档,则不需要使用$setDate.now()也返回一个时间戳。看到了吗,它仍然为我提供了一个日期,对于所有这些foo实例来说,它都不在最右边。运行之后,我执行了一个db.foo.findOne(),lastLookedAt为:13276919186,它转换为jruby-1.6.5:011>Time.at(1327691719186)=>Sun Nov 16 02:19:46-0500 44042我的错,POSIX时间使用秒,而Javascript时间使用毫秒。日期。现在()/1000应该可以工作了。你可能需要舍入它。psh是那个空的{}为我做的,感谢PhilHow为oldvalue+“某些字符串”可能重复的