我想在20分钟前删除所有日期记录 . Postgres(或Sequelize)对我提供的裸javascript Date
对象不满意作为比较值 .
我在postgres 9.6数据库上使用sequelize 4.37 .
有问题的列是用 type: Sequelize.DATE
声明的,研究表明这相当于 TIMESTAMP WITH TIME ZONE
:具有微秒精度的完整日期和时间以及时区指示符 . (这也是我在使用psql CLI工具描述表时所看到的 . )
所以,我这样做:
const Sequelize = require('sequelize')
const { SomeModel } = require('../models.js')
// calculate 20 minutes ago
async function deleteStuff() {
const deletionCutoff = new Date()
deletionCutoff.setMinutes( deletionCutoff.getMinutes() - 20 )
await SomeModel.destroy({
where: {
[ Sequelize.Op.lt ]: { dateColumn: deletionCutoff }
}
})
但我得到这个错误:
Error: Invalid value { dateColumn: 2018-11-21T21:26:16.849Z }
文档建议我应该能够提供一个简单的javascript日期或ISO8601字符串,但两者都抛出相同的 Invalid Value
错误 . 唯一的区别是,如果我传递一个字符串,错误会在值周围显示单引号:
// error when dateColumn: deletionCutoff.toISOString()
Error: Invalid value { dateColumn: '2018-11-21T21:26:16.849Z' }
1 回答
嗯,这非常令人尴尬 . 我错误地构造了
where
子句 .也许我应该删除这个问题 . 也许不是 - 我得到的错误可能会更有帮助 .