Node.js Sequelize能否实现值在两列区间的WHERE查询?
在Sequelize中不使用原生查询实现指定BETWEEN逻辑
完全可以实现,不需要依赖原生查询。你可以通过Sequelize的操作符(Op)组合条件来复现目标SQL的逻辑——因为10000 BETWEEN minAmount AND maxAmount等价于minAmount <= 10000 AND maxAmount >= 10000,天数的条件同理。
假设你的模型名为TableName(对应数据库的tablename表),具体实现代码如下:
const { Op } = require('sequelize'); // 执行查询 const targetRecords = await TableName.findAll({ where: { minAmount: { [Op.lte]: 10000 }, maxAmount: { [Op.gte]: 10000 }, minDay: { [Op.lte]: 30 }, maxDay: { [Op.gte]: 30 } } });
补充说明:
- Sequelize的
where条件默认使用AND连接所有子条件,因此无需显式声明Op.and - 如果需要更清晰地体现逻辑分组,也可以显式使用
Op.and包裹条件,效果完全一致:
const { Op } = require('sequelize'); const targetRecords = await TableName.findAll({ where: { [Op.and]: [ { minAmount: { [Op.lte]: 10000 } }, { maxAmount: { [Op.gte]: 10000 } }, { minDay: { [Op.lte]: 30 } }, { maxDay: { [Op.gte]: 30 } } ] } });
这段代码生成的SQL语句和你给出的原生SQL逻辑完全一致,不会用到原生查询语句。
内容的提问来源于stack exchange,提问作者Poor programmer
相关产品推荐
相关产品推荐

