如何在Sequelize查询中添加enabled为1或2的条件判断?
解决Sequelize中查询enabled字段为1或2的问题
你当前的代码存在问题:JavaScript对象里重复的键会被后面的覆盖,所以where中的enabled:1会被enabled:2覆盖,实际只会查询enabled=2的记录,完全达不到你要的“或”逻辑。
下面提供两种符合需求的写法:
方法1:使用Op.in(推荐,简洁直观)
这种方式对应SQL中的IN语句,和OR逻辑等价,适合值为多个枚举的场景:
const { Op } = require('sequelize'); // 根据项目导入方式调整,ES模块可改用import const existBusiness = await Business.findOne({ where: { id, enabled: { [Op.in]: [1, 2] } }, });
生成的SQL条件类似:WHERE id = ? AND enabled IN (1, 2)
方法2:使用Op.or(适合复杂条件组合)
如果需要更灵活的多条件组合,可以用Op.or明确实现“或”逻辑:
const { Op } = require('sequelize'); const existBusiness = await Business.findOne({ where: { id, [Op.or]: [ { enabled: 1 }, { enabled: 2 } ] }, });
生成的SQL条件类似:WHERE id = ? AND (enabled = 1 OR enabled = 2)
注意
如果你的Sequelize版本低于v5,可能需要使用旧语法($in、$or),但目前主流项目已普遍支持Op对象的写法。
内容的提问来源于stack exchange,提问作者SavceBoyz
相关产品推荐
相关产品推荐

