我假设有一个名为foo
的收集。
foo
的每个实例都有一个名为lastLookedAt的字段,它是一个自epoch以来的UNIX时间戳。我希望能够通过MongoDB客户端并将所有现有文档(大约20,000个)的时间戳设置为当前时间戳。
处理此问题的最佳方式是什么?
答案 0 :(得分:392)
在Mongo shell中,或与任何Mongodb客户端一起使用:
•对于Mongodb> = 3.2:
db.foo.updateMany({}, {$set: {lastLookedAt: Date.now() / 1000}})
请参阅http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents
{}
是条件(空条件匹配任何文档){$set: {lastLookedAt: Date.now() / 1000}}
是您想要做的事情•对于Mongodb> = 2.2:
db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, { multi: true })
请参阅http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents
{}
是条件(空条件匹配任何文档){$set: {lastLookedAt: Date.now() / 1000}}
是您想要做的事情{multi: true}
是“更新多个文档”选项•对于Mongodb< 2.2:
db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, false, true)
请参阅https://web.archive.org/web/20120613233453/http://www.mongodb.org/display/DOCS/Updating
{}
是条件(空条件匹配任何文档){$set: {lastLookedAt: Date.now() / 1000}}
是您想要做的事情false
用于“upsert”参数(如果不存在则插入,否则更新 - 不是您想要的)true
用于“multi”参数(更新多个记录)答案 1 :(得分:7)
此代码对您有所帮助
Model.update({
'type': "newuser"
}, {
$set: {
email: "abc@gmail.com",
phoneNumber:"0123456789"
}
}, {
multi: true
},
function(err, result) {
console.log(result);
console.log(err);
})
答案 2 :(得分:3)
我已经使用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);
答案 3 :(得分:0)