Sequelize findOne中$between日期查询失效问题求助
Sequelize中findOne的$between查询未生效排查
我搞不懂为什么findOne里的$between查询不生效,相关信息如下:
原实现代码
async getSign(childrenId: number, week?: number, year?: number) { if (week && year) { const startDate = moment().year(year).week(week).startOf("week").format("YYYY-MM-DD"); const endDate = moment().year(year).week(week).endOf("week").format("YYYY-MM-DD"); console.log(startDate, endDate); const signature = await this.diarySignRepository.findOne({ where: { childrenId, date: { $between: [startDate, endDate] } }, attributes: ['sign'], }); return signature?.sign; } }
请求地址
http://localhost:5000/diary/sign/get/1?week=11&year=2023
数据库中存在的记录
| id | childrenId | date | sign |
|---|---|---|---|
| 2 | 1 | 2023-03-17 | true |
控制台输出
2023-03-12 2023-03-18 Executing (default): SELECT "sign" FROM "diary_sign" AS "DiarySign" WHERE "DiarySign"."childrenId" = '1' AND "DiarySign"."date" = '2023-02-18' LIMIT 1;
可以看到控制台打印的日期范围是2023-03-12到2023-03-18,但实际执行的SQL里date条件变成了等于2023-02-18,完全没用到$between,数据库里2023-03-17的记录也匹配不到。
替代实现(已生效)
因为找不到原因,我改用JS逻辑实现了需求:
async getStatusDiarySign(childrenId: number, week?: number, year?: number) { if (week && year) { const startDate = moment() .year(year) .week(week) .startOf("week") .format("YYYY-MM-DD"); const endDate = moment() .year(year) .week(week) .endOf("week") .format("YYYY-MM-DD"); console.log(startDate, endDate); const diarySigns = await this.diarySignRepository.findAll({ where: { childrenId, }, }); let sign = false; diarySigns.some((diarySign) => { const date = moment(diarySign.date).format("YYYY-MM-DD"); if (date >= startDate && date <= endDate) { sign = diarySign.sign; return sign; } }); return sign; } }
内容的提问来源于stack exchange,提问作者wowblvck
相关产品推荐
相关产品推荐

