自定义查询正则表达式MongoDB + Spring数据

时间:2018-12-15 12:25:40

标签: java mongodb spring-data spring-data-mongodb

我正在尝试使用MongoDB在Spring Data中编写一个“ startsWith”查询。如果我使用Mongo Shell编写此代码,它将起作用,并列出每个以字母x或X开头的电子邮件地址(不区分大小写):db.user.find({email:/^x/i})

但是,这不是:

@Query(value = "{'$or':[{'name':?0},{'email':?0}]}")
List<User> findAllByFreeTextSearch(String keyword);

我试图将/^.../i添加到关键字本身,并以一打组合的方式添加到@Query中,但是没有运气。正确的语法是什么?

2 个答案:

答案 0 :(得分:2)

Spring Data意图通过包装这些参数来防止通过带注释的查询执行恶意模式。

为此,请像下面那样使用$regex

@Query("{'$or':[{ 'name' : { '$regex' : '?0', '$options' : 'i'}}, ...")
List<User> findAllByFreeTextSearch(String keyword);

答案 1 :(得分:1)

/ expression /是shell和js驱动程序中使用的替代语法。

您需要将“ ^ x”作为Java驱动程序的关键字传递。

尝试

@Query(value = "{$or:[{name:{$regex:?0,$options:'i'}},{email:{$regex:?0,$options:'i'}}]}")
List<User> findAllByFreeTextSearch(String keyword);