regex Java Spring MongoDB @使用正则表达式查询

hivapdat  于 2022-11-18  发布在  Java
关注(0)|答案(2)|浏览(138)

任何人都可以帮助我转换以下查询:

@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' }}]}")
4zcjmb1e

4zcjmb1e1#

字符?是正则表达式中的一个特殊字符,表示 * 可选 *,就像a?表示a可能存在或不存在。
如果你想和它匹配,你必须逃离它。

$regex: '/^\?0$/'

如果你需要把它字面上,那么你需要两个反斜杠:

$regex: '/^\\?0$/'
kx1ctssn

kx1ctssn2#

只要从查询中删除/,因为您将regex作为字符串传递(而不是将regex值用单引号括起来)。更具体地说,下面的查询将给予您想要的结果:

@Query("{$or:[{'name':{ $regex: '^?0$', $options: 'i' }},{'synonims':{ $regex: '^?0$', $options: 'i' }}]}")

Javascript将/中的值视为正则表达式(/pattern/),用单引号将其括起来使其成为字符串。以下两种方法都有效:

{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }

https://www.mongodb.com/docs/manual/reference/operator/query/regex/#mongodb-query-op.-regex

相关问题