我假设有一个名为 foo
的集合。
foo
的每个实例都有一个名为 lastLookedAt 的字段,它是自纪元以来的 UNIX 时间戳。我希望能够通过 MongoDB 客户端并将所有现有文档(大约 20,000 个)的时间戳设置为当前时间戳。
处理这个问题的最佳方法是什么?
无论版本如何,对于您的示例,<update>
是:
{ $set: { lastLookedAt: Date.now() / 1000 } }
但是,根据您的 MongoDB 版本,查询看起来会有所不同。无论版本如何,关键是空条件 {}
将匹配任何文档。在 Mongo shell 或任何 MongoDB 客户端中:
db.foo.updateMany( {}, <update> )
{} 是条件(空条件匹配任何文档)
db.foo.update( {}, <update>, { multi: true } )
{} 是条件(空条件匹配任何文档)
{multi: true} 是“更新多个文档”选项
db.foo.update( {}, <update>, false, true )
{} 是条件(空条件匹配任何文档)
false 用于“upsert”参数
true 用于“multi”参数(更新多条记录)
此代码将对您有所帮助
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 方法。首先,我将构建一个查询,它将获取我感兴趣的所有文档,并对我想要更改的字段进行更新。 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);
不定期副业成功案例分享