在时间之后删除嵌套对象 - MongoDB + Node.js

时间:2015-02-22 02:23:03

标签: javascript node.js mongodb timeout

我找到了有关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周后删除通知?

2 个答案:

答案 0 :(得分:1)

如果在定期批处理过程中剔除它们是不可行的,我会将检查作为获取文档的任何代码的一部分。您可能会在数据库中收到超过两周的通知,但假设您有一个地方可以获得' get'发生了,您可以在那里进行检查,并保证没有未修复的退回通知的文件。

答案 1 :(得分:0)

默认的TTL实现如何不按预期进行? 假设您的createdTime字段的值为2015-02-22:10:20,并使用TTL功能

db.notifications.ensureIndex( { "createdTime": 1 }, { expireAfterSeconds: 3600 } )

这将在2小时后清除该值,同样您可以将其设置为2周。 除非您的要求是每条记录的通知到期时间不同,否则默认实施应该完美。

您还可以编写一些代码作为解决方案的一部分,定期删除记录,例如在每天开始时或插入每条记录时(不建议使用后者)。