如何让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
});

如果你有固定的过期时间,不用担心ttlsetter和getter,设置expires: desired_expire_time_in_ms