Node.js 如何让mongoose ttl根据时间戳分别删除记录
我在我的mongoose数据库中使用mongoose ttl插件,我的问题是,每当ttl删除一条记录,我重启我的节点服务器,我的服务器通过mongoose与mongodb建立连接时,所有具有ttl索引且尚未过期的记录也会被删除。有时,重新启动服务器并建立连接会删除集合中的所有记录,即使它们的时间不近。最糟糕的是,即使时间过去了,所有记录都不会被删除,直到最后一个具有TTL索引的文档被删除。请帮忙Node.js 如何让mongoose ttl根据时间戳分别删除记录,node.js,mongodb,mongoose,ttl,Node.js,Mongodb,Mongoose,Ttl,我在我的mongoose数据库中使用mongoose ttl插件,我的问题是,每当ttl删除一条记录,我重启我的节点服务器,我的服务器通过mongoose与mongodb建立连接时,所有具有ttl索引且尚未过期的记录也会被删除。有时,重新启动服务器并建立连接会删除集合中的所有记录,即使它们的时间不近。最糟糕的是,即使时间过去了,所有记录都不会被删除,直到最后一个具有TTL索引的文档被删除。请帮忙 const EventSchema = new Schema({ //
const EventSchema = new Schema({
//
});
EventSchema.plugin(ttl, { ttl: 60000});
//
const event = new Event({
ttl: "2m"
})
事实上,如果您想要描述您应该使用的行为,您不必使用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 setter和getter以及set expires:理想的ttl是固定值还是每个事件都会更改?非常感谢兄弟