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

Custom query regex MongoDB + Spring Data

我正在尝试使用 MongoDB 在 Spring 数据中编写一个 "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 但没有成功。正确的语法是什么?

Spring 数据有意包装这些参数,以防止通过带注释的查询执行恶意模式。

请像下面那样使用 $regex

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

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

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

尝试

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