MongoDB:更新一个字段上的每个文档
我假设收集了一个名为foo
名字。
foo
每个实例都有一个名为lastLookedAt的字段,它是自epoch起的UNIX时间戳。 我希望能够通过MongoDB客户端,并将所有现有文档(大约两万个)的时间戳设置为当前时间戳。
处理这个问题的最好方法是什么?
在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”参数(更新多个logging)
此代码将对您有所帮助
Model.update({ 'type': "newuser" }, { $set: { email: "abc@gmail.com", phoneNumber:"0123456789" } }, { multi: true }, function(err, result) { console.log(result); console.log(err); })
我一直在使用MongoDB .NET驱动程序一个多月。 如果我要使用.NET驱动程序,我会使用集合对象上的Update方法。 首先,我将构build一个查询,以获取所有我感兴趣的文档,并对要更改的字段进行更新。 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);