МонгоДБ | Удалить старые данные

Сегодня мы рассмотрим, как удалять старые записи в MongoDB на основе X дней. Прежде чем что-то делать, нам нужно сгенерировать список документов для базы данных:

db.statistic.insertMany([
  {
    event: 'pageview',
    userId: 'user1',
    createdAt: new Date('July 1, 2022 14:10:00'),
  },
  ...
    // more documents here
  ...
  {
    event: 'pageview',
    userId: 'user10',
    createdAt: new Date('July 10, 2022 11:22:00'),
  },
]);

Для этого примера у нас есть 10 документов. Нам нужно удалить документы старше X дней:

db.statistic.remove({ 
  createdAt: {
    $lt: new Date(today - X days) 
  } 
});

и наверняка мы должны написать задание Cron, чтобы сделать это.

cron "0 0 0 * * *" do
  db.statistic.remove({ 
    createdAt: { 
      $lt: new Date(today - X days) 
    } 
  });
end

Запускайте Cron в 00:00 каждый день. Для этого вы можете использовать npm package.

npm install cron

пример cron.js:

const { CronJob } = require('cron');

const job = new CronJob(
  '0 0 0 * * *',
  (() => {
    db.statistic.remove({
      createdAt: {
        $lt: new Date(today - X days),
      },
    });
  }),
  null,
  true,
  'America/Los_Angeles',
);

Давайте автоматизируем это без программирования Cron.

db.statistic.createIndex({
  createdAt: 1,
}, {
  expireAfterSeconds: 60 * 60 * 24 * 7,
});

Это все, что нам нужно сделать. Просто, верно? :)

Для получения дополнительной информации об индексах TTL MongoDB посетите раздел Срок действия данных из коллекций путем установки TTL.

Если у вас есть какие-либо вопросы или отзывы об этой статье, не стесняйтесь оставлять комментарии.
Спасибо за прочтение и Присоединяйтесь к нашей команде.