我想删除日期在 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' }
嗯,这真是太尴尬了。我构建了where
条款不正确。
// BAD CODE
await SomeModel.destroy({
where: {
[ Sequelize.Op.lt ]: {
dateColumn: deletionCutoff
}
}
})
// GOOD CODE
await SomeModel.destroy({
where: {
dateColumn: {
[ Sequelize.Op.lt ]: deletionCutoff
}
}
})
也许我应该删除这个问题。也许不是——我得到的错误可能会更有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)