如何在Mongodb中自动更新Upsert上的时间戳

时间:2013-12-07 22:04:29

标签: node.js mongodb insert mongoose upsert

如果我有一个带有密钥expires的模式;如何在每次更新文档时自动更新该密钥的值?这可能会更复杂,但是,我upsert因此需要在初始insert上设置此值,然后在每个upsert上进行更新。

因此,当文档为insert时:

{
  expires: *an hour from the insert*
}

当它update d(通过upsert)时:

{
  expires: *an hour from the update*
}

如果内置了此功能,我使用的是Mongoose。如果Mongodb不支持它,也不支持Mongoose,我只需要计算expires:并更新值,但它会很高兴在Mongodb中自动完成这项工作!

事实上,它不会真正需要处理insert;因为我可以检查expires是否为空,并从_id中提取时间。

一如既往,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

Mongoose中间件不会在update个电话上启动,因此您需要自己执行此操作:

var expires = new Date();
expires.setHours(expires.getHours() + 1);
MyModel.update({...}, {$set: {expires: expires, ...}}, {upsert: true}, callback);

另外,我不知道你的用例,但你也应该看看Mongo内置的对收集过期数据的支持,如果那是你想要做的。请参阅here

答案 1 :(得分:0)

最新版本的Mongoose允许在创建新模型时传递{ timestamps: true }作为选项。此功能会自动设置createdAtupdatedAtHere is the documentation