Javascript 用日期续写Where语句
我使用sequelize作为我的后端ORM。现在我想做一些关于日期的where操作 更具体地说,我想获得所有数据,其中日期是从现在开始,7天之后 问题是文档没有指定可以对Javascript 用日期续写Where语句,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我使用sequelize作为我的后端ORM。现在我想做一些关于日期的where操作 更具体地说,我想获得所有数据,其中日期是从现在开始,7天之后 问题是文档没有指定可以对Datatypes.DATE执行哪些操作 有人能给我指出正确的方向吗?就像Molda说的,你可以用$gt,$lt,$gte或$lte加上日期: model.findAll({ where: { start_datetime: { $gte: moment().subtract(7, 'days').toD
Datatypes.DATE执行哪些操作
有人能给我指出正确的方向吗?就像Molda说的,你可以用$gt
,$lt
,$gte
或$lte
加上日期:
model.findAll({
where: {
start_datetime: {
$gte: moment().subtract(7, 'days').toDate()
}
}
})
如果您使用的是Sequelize的v5,则必须包含Op
,因为键已移动到Symbol
const { Op } = require('sequelize')
model.findAll({
where: {
start_datetime: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
查看更多信息我不得不从sequelize中导入运算符符号并像这样使用
const { Op } = require('sequelize')
model.findAll({
where: {
start_datetime: {
[Op.gte]: moment().subtract(7, 'days').toDate()
}
}
})
根据文件,出于安全原因,这被认为是最佳做法
有关更多信息,请参阅
使用不带任何别名的Sequelize可以提高安全性。一些框架
自动将用户输入解析为js对象,如果无法
清理输入可能会将对象注入
要续集的字符串运算符
(……)
为了更好的安全性,强烈建议使用Sequelize.Op而不是
完全依赖于任何字符串别名。您可以限制您的别名
应用程序将需要通过设置运算符别名选项,记住
清理用户输入,特别是当您直接将其传递给
续集方法
您还可以使用Sequelize.literal()
在SQL中执行日期操作
以下代码适用于Postgres,但我很确定类似的操作也可以在其他系统中执行:
model.findAll({
where: {
start_datetime: {
$gte: Sequelize.literal('NOW() - INTERVAL \'7d\''),
}
}
})
此解决方案没有moment.js
库
从7天前到现在
从现在到7天后
注:
$gt
代表“大于”。您可以使用$gte
而不是$gt
<代码>$gte
表示“大于或等于”。当然,$lte
也一样
$lt
和$gt
来确保日期不会进入未来(根据原始问题)[Sequelize.Op.gt]
而不是$gt
。如果在Sequelize v5上使用,请使用该选项那么您是否尝试过$lt:(新日期())和$gt:(…)替换。。。随着时间的推移,现在-7天来堆栈溢出!为了进一步提高答案的质量,请记住,其他网站的链接可能会变得不可用,因此强烈建议您将外部文档中的相关信息复制为答案正文中的引文。这是我的问题。谢谢。这是Sequelize的新标准。请注意,这在Sequelize 5中不起作用。。。由于基于字符串的运算符不安全,您可以从Sequelize中查看中断更改。。您应该按照其他注释使用[Op.gte]如果您只是导入dbHI,而不是使用矩().subtract(7,'days').toDate(),我需要使用列名createdDate。有可能吗?在\“7d \”或其附近有一个警告语法错误。可能是您的双
“
都已转义吗?
const sevenDaysAgo = new Date(new Date().setDate(new Date().getDate() - 7));
models.instagram.findAll({
where: {
my_date: {
$gt: sevenDaysAgo,
$lt: new Date(),
},
},
});
const sevenDaysFromNow = new Date(new Date().setDate(new Date().getDate() + 7));
models.instagram.findAll({
where: {
my_date: {
$gt: new Date(),
$lt: sevenDaysFromNow,
},
},
});