如何使mongoose-ttl根据时间戳分别删除记录

时间:2018-08-24 14:54:06

标签: node.js mongodb mongoose ttl

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

    const EventSchema = new Schema({
      //
    });

    EventSchema.plugin(ttl, { ttl: 60000});

    //
    const event = new Event({
      ttl: "2m"  
    })

1 个答案:

答案 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