如何使用Sequelize的findAll方法查询当日创建的所有数据
Sequelize 当日创建记录查询调整方案
问题分析
你当前的写法直接将activity_timestamp赋值为new Date(),相当于查询精确匹配当前时刻到毫秒的记录,自然无法匹配全天所有数据。要查询当日记录,需要匹配activity_timestamp落在当日00:00:00到次日00:00:00的区间内即可。
调整步骤
- 首先确保你已经引入Sequelize的操作符对象:
const { Op } = require('sequelize');
- 计算当日的时间边界:
// 当日0点 const todayStart = new Date(); todayStart.setHours(0, 0, 0, 0); // 次日0点 const tomorrowStart = new Date(todayStart); tomorrowStart.setDate(todayStart.getDate() + 1);
- 修改查询条件里的时间判断逻辑:
let condition = { source_operator_id: req.user_info.operator_id, activity_status: true } if(currentDate){ condition.activity_timestamp = { [Op.gte]: todayStart, [Op.lt]: tomorrowStart } } // 后续的findAll逻辑保持不变即可 TrollyActivityLog.findAll({ where: condition, include:[ { model:CustomerProfile, as:'customerinfo', required:true, } ], limit: limit, offset: offset })
补充说明
- 使用
[Op.gte]大于等于当日开始 +[Op.lt]小于次日开始的写法,比between更稳妥,可以避免因为数据库存储的时间带有毫秒值导致的边界数据漏匹配问题 - 如果你的
currentDate是前端传的指定日期,只需要把todayStart的计算基准改成传入的currentDate即可,逻辑保持一致
内容的提问来源于stack exchange,提问作者Rabbani_
相关产品推荐
相关产品推荐

