如何使用Sequelize实现多字段条件查询?
问题分析与解决方案
你的写法为什么不生效
你当前的查询逻辑存在矛盾:要求同一条记录的skill字段同时等于'IDE'和'REST',这在单条记录里不可能实现,所以查询永远返回空结果,自然看起来“无法生效”。
正确实现方式(分场景)
场景1:单条记录对应一个技能(如user_skills表,每条记录存用户ID、技能名、时长)
这种场景下要找同时拥有两个达标技能的用户,有两种常用实现方式:
方式1:使用EXISTS子查询
where: { [Op.and]: [ { [Op.exists]: sequelize.literal(` SELECT 1 FROM user_skills us WHERE us.user_id = users.id AND us.skill = 'IDE' AND us.months >= 28 `) }, { [Op.exists]: sequelize.literal(` SELECT 1 FROM user_skills us WHERE us.user_id = users.id AND us.skill = 'REST' AND us.months >= 20 `) } ] }
方式2:使用GROUP BY + HAVING聚合
User.findAll({ include: [ { model: UserSkill, where: { [Op.or]: [ { skill: 'IDE', months: { [Op.gte]: 28 } }, { skill: 'REST', months: { [Op.gte]: 20 } } ] }, required: true } ], group: ['User.id'], having: sequelize.where(sequelize.fn('COUNT', sequelize.col('UserSkills.id')), '=', 2) })
场景2:单条记录包含多个技能字段(如users表有ide_months、rest_months等字段)
这种场景直接指定对应字段的条件即可:
where: { ide_months: { [Op.gte]: 28 }, rest_months: { [Op.gte]: 20 } }
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

