Spring Boot MongoDB正则匹配问题求助(2.3.12.RELEASE版本)
解决Spring Boot 2.3.x中MongoDB正则匹配失效问题
问题原因
你在Java代码中使用的"\bskil"存在转义错误:
- 在Java字符串里,
\b是退格控制字符(而非正则表达式中的单词边界),导致最终传给MongoDB的正则模式并非预期的\bskil,而是包含退格符的无效模式。 - 直接在MongoDB中使用
/\bskil/是有效的,因为MongoDB的正则语法里\b直接代表单词边界,不需要额外转义。
修复方案
将Java代码中的正则字符串修改为双反斜杠转义的形式:
Criteria.where("name").regex("\\bskil", "i")
这样Java会将\\b解析为单个\b,最终传给MongoDB的正则模式就是正确的\bskil,和你在MongoDB客户端中执行的逻辑一致。
验证说明
修改后,Spring生成的$match语句会变为:
{ "$match" : { "name" : { "$regularExpression" : { "pattern" : "\\bskil", "options" : "i" } } } }
此时MongoDB会正确识别\b作为单词边界,实现预期的匹配效果。
内容的提问来源于stack exchange,提问作者Aslak
相关产品推荐
相关产品推荐

