МонгоДБ | Удалить старые данные
Сегодня мы рассмотрим, как удалять старые записи в 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.
Если у вас есть какие-либо вопросы или отзывы об этой статье, не стесняйтесь оставлять комментарии.
Спасибо за прочтение и Присоединяйтесь к нашей команде.