Mongodb,mongoose - 动态设置TTL时间

时间:2014-10-17 17:54:04

标签: node.js mongodb mongoose

我指的是Time to live in mongodb, mongoose dont work. Documents doesnt get deleted来问我的问题: 是否可以动态设置MongoDB的TTL时间? 因此,假设您有令牌集合,并且您希望将其用于不同目的。在这种情况下,每次创建令牌时,最好为每个令牌设置特定的TTL。 如果可以,请提供一些代码片段吗?

2 个答案:

答案 0 :(得分:1)

If you define a TTL index on a collection, then periodically MongoDB will remove() old documents from the collection.

db.events.ensureIndex('time', expireAfterSeconds=3600)

它使用索引系统来处理TTL。它是固定的,没有办法为每个文档动态定义它。在您的场景中,我建议您使用像RabbitMQ这样的Messaging System和MongoDB https://www.rabbitmq.com/ttl.html

答案 1 :(得分:1)

要为文档动态设置TTL,您可以使用相同的索引,但可以在如下模式中创建另一个字段,例如expireAt

expireAt: {
            type: Date,
            default: null,
}

然后创建一个索引,例如(猫鼬示例):

schema.index({ expireAt: 1 }, { expireAfterSeconds: 0 });

现在,对于要过期的所有文档,您可以设置确切的日期时间。对于其他人,其字段expireAt默认为null不会过期。

您可以在MongoDB文档中看到相同的示例here