如何让猫鼬-ttl分别根据时间戳删除记录



在我的猫鼬数据库中使用 mongoose-ttl 插件,我的问题是,每当 ttl 删除记录并且我重新启动我的节点服务器并且我的服务器通过 Mongoose 连接到 MongoDB,所有具有 ttl 索引且未过期但也会被删除的记录。有时重新启动我的服务器并建立连接会从集合中删除所有记录,即使它们的时间甚至不近。最糟糕的是,即使时间过去了,所有记录都不会被删除,直到最后一个带有 TTL 索引的文档被删除。请帮忙。

const EventSchema = new Schema({
//
});
EventSchema.plugin(ttl, { ttl: 60000});
//
const event = new Event({
ttl: "2m"  
})

事实上,如果你想要你描述的行为,你应该使用mongodb过期机制,你不必使用mongoose-ttl

猫鼬的设置可能是这样的:

const EventSchema = new Schema(
{
expiresAt: { type: Date, default: Date.now, expires: 0 },
},
);
EventSchema.virtual('ttl').set(function(ms) {
this.expiresAt = new Date(Date.now() + ms);
});
EventSchema.virtual('ttl').get(function() {
return this.expiresAt - Date.now();
});
const event = new Event({
ttl: 2 * 60 * 1000, // expire time in milliseconds
});

如果您有固定的过期时间,请不要担心ttl二传手和getter并设置expires: desired_expire_time_in_ms

最新更新