Sequelize中Op.or嵌套Op.and不生效,如何实现(A AND B) AND (C OR D OR E OR F)查询?
问题原因
你当前代码中Op.or对应的数组内仅包含一个同时携带C、D、E、F四个条件的对象,Sequelize默认会对单个对象内的多个属性做AND连接,最终解析出的逻辑就变成了A AND B AND C AND D AND E AND F,和预期不符。
正确实现写法
你需要将OR逻辑下的每个条件拆分为Op.or数组中的独立项,有两种常用写法都可以实现需求:
写法1:显式声明全逻辑
where: { [Op.and]: [ { A, B }, { [Op.or]: [ { C }, { D }, { E }, { F } ] } ] }
写法2:简化写法(利用Sequelize默认规则)
Sequelize默认会将where顶层的平级条件按AND连接,因此可以省略外层的Op.and声明,代码更简洁:
where: { A, B, [Op.or]: [ { C }, { D }, { E }, { F } ] }
两种写法最终生成的SQL逻辑均为(A AND B) AND (C OR D OR E OR F),符合你的需求。
内容的提问来源于stack exchange,提问作者Shooting Stars
相关产品推荐
相关产品推荐

