Sequelize where-clause operator 不产生预期的输出
Sequelize where-clause operator not producing expected output
我正在使用 Sequelize 为在 NodeJS 中构建的应用构建密码重置功能。
当用户输入新密码并提交时,我正在查询数据库以使用以下代码查找用户:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}
});
但是,此条目生成的查询如下(从终端复制,我为不相关的元素添加了“...”):
Executing (default): SELECT ... `resetPasswordToken`, `resetPasswordExpires` FROM `users` AS `user` WHERE `user`.`resetPasswordToken` = ... AND `user`.`resetPasswordExpires` = '2020-08-09 04:00:00';
这个查询 运行 时的当前日期时间是:'2020-08-09 14:24:40',这让我很困惑为什么这个续集查询被翻译成 "= '2020-08- 09 04:00:00'".
结果是查询没有匹配任何用户,即使它应该匹配一个用户。
我的问题如下:
- 我查询的语法是否正确?它应该搜索大于现在的日期时间。
- 如果它是正确的,是否还有其他我遗漏的东西会阻止查询工作?
感谢您的帮助!
-彼得
不幸的是,较新版本的 sequelize 不再支持运算符别名 ($gt)。使用 [Op.gt] 而不是 $gt
尝试:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { [Op.gt]: Date.now() }
}
});
https://sequelize.org/master/manual/model-querying-basics.html#operators
我正在使用 Sequelize 为在 NodeJS 中构建的应用构建密码重置功能。
当用户输入新密码并提交时,我正在查询数据库以使用以下代码查找用户:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { $gt: Date.now() }
}
});
但是,此条目生成的查询如下(从终端复制,我为不相关的元素添加了“...”):
Executing (default): SELECT ... `resetPasswordToken`, `resetPasswordExpires` FROM `users` AS `user` WHERE `user`.`resetPasswordToken` = ... AND `user`.`resetPasswordExpires` = '2020-08-09 04:00:00';
这个查询 运行 时的当前日期时间是:'2020-08-09 14:24:40',这让我很困惑为什么这个续集查询被翻译成 "= '2020-08- 09 04:00:00'".
结果是查询没有匹配任何用户,即使它应该匹配一个用户。
我的问题如下:
- 我查询的语法是否正确?它应该搜索大于现在的日期时间。
- 如果它是正确的,是否还有其他我遗漏的东西会阻止查询工作?
感谢您的帮助!
-彼得
不幸的是,较新版本的 sequelize 不再支持运算符别名 ($gt)。使用 [Op.gt] 而不是 $gt
尝试:
const user = await User.findAll({ where:
{
resetPasswordToken: req.params.token,
resetPasswordExpires: { [Op.gt]: Date.now() }
}
});
https://sequelize.org/master/manual/model-querying-basics.html#operators