Javascript Sequelize-使用MySQL进行抽象查询,以选择所有早于5分钟的记录

Javascript Sequelize-使用MySQL进行抽象查询,以选择所有早于5分钟的记录,javascript,mysql,node.js,orm,sequelize.js,Javascript,Mysql,Node.js,Orm,Sequelize.js,我正在努力使用sequelize编写一个抽象查询,该查询将使用“updatedAt”列标识一个超过5分钟的记录。我的问题如下: const Jts = await models.Jts.findOne({ where: { publish: true, retry: { [Op.lte]: 3 }, updatedAt: { [Op.lte]: [sequelize.fn("(

我正在努力使用sequelize编写一个抽象查询,该查询将使用“updatedAt”列标识一个超过5分钟的记录。我的问题如下:

const Jts = await models.Jts.findOne({
    where: {
        publish: true,
        retry: {
            [Op.lte]: 3
        },
        updatedAt: {
            [Op.lte]: [sequelize.fn("(NOW() - INTERVAL 5 MINUTE)")]
        }
    },
    include: ["OrgSetEntries"],
    paranoid: false,
    order: [
        ["effectiveDate", "ASC"],
        ["updatedAt", "ASC"]
    ]
});
我尝试了一些语法,但仍在挣扎。生成的查询始终生成“无效日期”字符串,例如:

... updatedAt` <= 'Invalid date';

非常感谢您的建议。

您可以使用
Sequelize.literal(“NOW()-(INTERVAL'5 MINUTE')”)
获取在5分钟前更新的数据行

例如

从'../../db'导入{sequelize};
从“Sequelize”导入Sequelize,{Model,DataTypes,Op};
类Jts扩展了模型{}
Jts.init(
{
发布:DataTypes.BOOLEAN,
重试:DataTypes.INTEGER,
更新日期:DataTypes.DATE,
},
{sequelize,modelName:'jts'},
);
(异步函数测试(){
试一试{
//创建表
wait sequelize.sync({force:true});
//种子
设date1=新日期();
date1.setHours(date1.getHours()-1);
等待Jts.bulkCreate([
{发布:false,重试:2},
{发布:false,重试:5},
{publish:true,retry:2,updatedAt:date1},
{发布:true,重试:1,更新日期:new Date()},
]);
//试验
const result=等待Jts.findOne({
其中:{
出版:是的,
重试:{
[Op.lte]:3,
},
更新日期:{
[Op.lte]:Sequelize.literal(“现在()-(间隔“5分钟”),
},
},
raw:是的,
});
log('result:',result);
}捕获(错误){
console.log(错误);
}最后{
等待续集。关闭();
}
})();
执行结果:

执行(默认):如果存在“jts”级联,则删除表;
执行(默认):如果存在“jts”级联,则删除表;
执行(默认):创建表,如果不存在“jts”(“id”序列,“发布”布尔值,“重试”整数,“updatedAt”带时区的时间戳,主键(“id”);
执行(默认):选择i.relname作为名称,ix.indprimary作为主要,ix.indunique作为唯一,ix.indkey作为indkey,array_agg(a.attnum)作为列索引,array_agg(a.attname)作为列名称,pg_get_indexdef(ix.indexrelid)作为pg_class t,pg_class i,pg_index ix的定义,pg_属性a,其中t.oid=ix.indrelid和i.oid=ix.indexrelid和a.attrelid=t.oid和t.relkind='r'和t.relname='jts'按i.relname分组,ix.indexrelid,ix.indisprimary,ix.indisunique,ix.indkey按i.relname排序;
正在执行(默认):在“jts”(“id”、“发布”、“重试”、“更新数据”)中插入值(默认值,false,2,NULL),(默认值,false,5,NULL),(默认值,true,2,'2020-04-16 12:50:43.458+00:00'),(默认值,true,1,'2020-04-16 13:50:43.458+00:00'),返回*;

执行(默认):从“jts”中选择“id”、“发布”、“重试”、“更新数据”作为“jts”,其中“jts”。“发布”=true和“jts”。“重试”嘿,谢谢你的回答!我不得不调整我的版本,可能是MySQL版本的不同(?)我的版本读[Op.lte]:Sequelize.literal(“DATE_SUB(NOW(),INTERVAL 5分钟)”)@prime抱歉。我使用PostgreSQL,所以如果要获取超过5分钟的记录,MySQL可能会有一点不同。查询不应该是[Op.gte]:Sequelize.literal(“DATE_SUB(NOW(),INTERVAL 5分钟)”)而不是[Op.lte]:Sequelize.literal(“DATE_SUB(NOW(),INTERVAL 5分钟)”)我很好奇,有人能告诉我吗