如果我有一个带有密钥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
中提取时间。
一如既往,非常感谢任何帮助!
答案 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 }
作为选项。此功能会自动设置createdAt
和updatedAt
。 Here is the documentation