我找到了有关MongoDB的TTL的信息,遗憾的是它只适用于整个文档。我希望能够在Node.js服务器上的一段时间(2周)后删除用户的通知。可以想象,通知是一组对象,作为用户MongoDB Model
中的一个字段,因此我可以在没有进一步请求的情况下登录它们。所以,如果我有这样的事情:
notifications: [{
notifType: String,
story: String,
seen: Boolean,
createdTime: Date,
from: {
name: String,
username: String,
id: mongoose.Schema.ObjectId
}
}]
如何在创建时间后计算2周后删除通知?
答案 0 :(得分:1)
如果在定期批处理过程中剔除它们是不可行的,我会将检查作为获取文档的任何代码的一部分。您可能会在数据库中收到超过两周的通知,但假设您有一个地方可以获得' get'发生了,您可以在那里进行检查,并保证没有未修复的退回通知的文件。
答案 1 :(得分:0)
默认的TTL实现如何不按预期进行?
假设您的createdTime
字段的值为2015-02-22:10:20
,并使用TTL功能
db.notifications.ensureIndex( { "createdTime": 1 }, { expireAfterSeconds: 3600 } )
这将在2小时后清除该值,同样您可以将其设置为2周。 除非您的要求是每条记录的通知到期时间不同,否则默认实施应该完美。
您还可以编写一些代码作为解决方案的一部分,定期删除记录,例如在每天开始时或插入每条记录时(不建议使用后者)。