如何使用NodeJS和Sequelize通过日期对比删除数据库过期数据
Sequelize 定时删除过期记录正确实现
Sequelize 不支持直接在查询条件对象中使用 </> 等原生JS比较运算符,需要通过内置的操作符对象 Op 实现范围查询,完整实现步骤如下:
- 首先从 sequelize 依赖中导入操作符对象
Op
const { Op } = require('sequelize');
- 修改定时任务逻辑,为异步回调添加异常捕获,正确编写删除条件:
// 每小时整点执行定时任务 cron.schedule('0 0 */1 * * *', async () => { try { await CodePassword.destroy({ where: { // Op.lt 对应小于运算符,满足 过期日期 < 当前时间 条件 expiration_date: { [Op.lt]: new Date() } } }); } catch (error) { // 自定义错误处理逻辑,例如打印日志 console.error('删除过期记录失败:', error); } });
如果业务仅需按日期判断是否过期,无需精确到时分秒,可将当前时间调整为当日0点再传入条件:
const todayStart = new Date(); todayStart.setHours(0, 0, 0, 0); // 条件改为 [Op.lt]: todayStart 即可
内容的提问来源于stack exchange,提问作者Gonsa02
相关产品推荐
相关产品推荐

