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