如何在Sequelize中查询以A-E开头的字母范围数据?
Sequelize按A-E开头的字母范围查询解决方案
你写的代码里犯了一个JavaScript对象的基础错误:同一个对象里重复的键会被最后一个值覆盖。所以你的[Op.and]里多个[Op.startsWith]实际上只剩下最后一个'e'的条件,自然只能查到E开头的记录。
下面给你两种可行的解决方案:
方案一:用Op.or匹配多个前缀
这种方法直观,适合范围小的情况:
where: { id: user.id, name: { [Op.or]: [ { [Op.startsWith]: 'a' }, { [Op.startsWith]: 'b' }, { [Op.startsWith]: 'c' }, { [Op.startsWith]: 'd' }, { [Op.startsWith]: 'e' } ] } }
方案二:用字符串范围查询(更高效)
因为字符串比较是基于ASCII编码的,A-E开头的字符串必然大于等于'A'且小于'F'(注意是小于'F',这样就能包含所有E开头的字符串)。这种方法不需要写多个OR条件,性能更好:
// 大小写敏感版本(只匹配A-E开头) where: { id: user.id, name: { [Op.gte]: 'A', [Op.lt]: 'F' } } // 大小写不敏感版本(匹配a-e和A-E开头) where: { id: user.id, name: { [Op.or]: [ { [Op.gte]: 'a', [Op.lt]: 'f' }, { [Op.gte]: 'A', [Op.lt]: 'F' } ] } } // 如果你的数据库支持正则(比如PostgreSQL),也可以用iLike做模糊匹配: where: { id: user.id, name: { [Op.iLike]: '[a-e]%' } }
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

