任何人都可以帮助我转换以下查询:
@Query("{$or:[{'name':?0},{'synonims':?0}]}")
Stream<Examination> customFind(String str);
转换为正则表达式查询,该正则表达式将允许不区分大小写的请求,如Spring文档所述:
EXACT(不区分大小写){"firstname" : { $regex: /^firstname$/, $options: 'i'}}
以下功能不起作用:
@Query("{$or:[{'name':{ $regex: '/^?0$/', $options: 'i' }},{'synonims':{ $regex: '/^?0$/', $options: 'i' }}]}")
2条答案
按热度按时间4zcjmb1e1#
字符
?
是正则表达式中的一个特殊字符,表示 * 可选 *,就像a?
表示a
可能存在或不存在。如果你想和它匹配,你必须逃离它。
如果你需要把它字面上,那么你需要两个反斜杠:
kx1ctssn2#
只要从查询中删除/,因为您将regex作为字符串传递(而不是将regex值用单引号括起来)。更具体地说,下面的查询将给予您想要的结果:
Javascript将/中的值视为正则表达式(/pattern/),用单引号将其括起来使其成为字符串。以下两种方法都有效:
https://www.mongodb.com/docs/manual/reference/operator/query/regex/#mongodb-query-op.-regex