如何让mongoose-ttl根据时间戳分别删除记录
How to make mongoose-ttl respectively delete records according to timestamp
我在我的 mongoose 数据库中使用 mongoose-ttl 插件,我的问题是,每当 ttl 删除一条记录并且我重新启动我的节点服务器并且我的服务器通过 mongoose 连接到 mongodb 时,所有记录具有 ttl 索引且未过期但也被删除。有时重新启动我的服务器并建立连接会删除集合中的所有记录,即使它们的时间还很短。最糟糕的是,即使时间已经过去,所有记录也不会被删除,直到最后一个带有 TTL 索引的文档被删除。请帮忙。
const EventSchema = new Schema({
//
});
EventSchema.plugin(ttl, { ttl: 60000});
//
const event = new Event({
ttl: "2m"
})
实际上,如果您想要描述的行为,您不必使用 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
setter和getter,设置expires: desired_expire_time_in_ms
我在我的 mongoose 数据库中使用 mongoose-ttl 插件,我的问题是,每当 ttl 删除一条记录并且我重新启动我的节点服务器并且我的服务器通过 mongoose 连接到 mongodb 时,所有记录具有 ttl 索引且未过期但也被删除。有时重新启动我的服务器并建立连接会删除集合中的所有记录,即使它们的时间还很短。最糟糕的是,即使时间已经过去,所有记录也不会被删除,直到最后一个带有 TTL 索引的文档被删除。请帮忙。
const EventSchema = new Schema({
//
});
EventSchema.plugin(ttl, { ttl: 60000});
//
const event = new Event({
ttl: "2m"
})
实际上,如果您想要描述的行为,您不必使用 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
setter和getter,设置expires: desired_expire_time_in_ms