我正在尝试使用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中,但是没有运气。正确的语法是什么?
答案 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);