我在mongoose数据库中使用mongoose-ttl插件时,我的问题是,每当一条记录被ttl删除并且我重新启动节点服务器,并且我的服务器通过mongoose连接到mongodb时,所有具有ttl索引并且是尚未过期,也将被删除。有时,重新启动服务器并建立连接会从集合中删除所有记录,即使它们的时间还没有到。最糟糕的是,即使时间过去了,也不会删除所有记录,直到删除带有TTL索引的最后一个文档。请帮忙。
const EventSchema = new Schema({
//
});
EventSchema.plugin(ttl, { ttl: 60000});
//
const event = new Event({
ttl: "2m"
})
答案 0 :(得分:1)
实际上,如果您要使用已描述的行为,则不必使用mongoose-ttl
。应该使用mongodb expire mechanism。
猫鼬的设置可能是这样的:
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
的设置方法和设置方法expires: desired_expire_time_in_ms