Как сделать так, чтобы mongoose-ttl соответственно удалял записи по временной метке - PullRequest
0 голосов
/ 24 августа 2018

Я использую плагин mongoose-ttl в моей базе данных mongoose, моя проблема в том, что всякий раз, когда запись удаляется с помощью ttl, и я перезапускаю сервер узлов, и мой сервер устанавливает соединение с mongodb через mongoose, все записи с индексом ttl и еще не истек и удаляется. Иногда перезапуск моего сервера и установление соединения удаляют все записи из коллекции, даже если их время даже близко. Хуже всего то, что, даже когда время прошло, все записи не удаляются, пока не будет удален последний документ с индексом TTL. Пожалуйста помоги.

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

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

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

1 Ответ

0 голосов
/ 24 августа 2018

Вам не нужно использовать mongoose-ttl, на самом деле, если вы хотите описанное вами поведение, вы должны использовать механизм истечения mongodb .

Настройка для мангуста может быть такой:

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

...