Java spring data mongo中的精确不区分大小写匹配

Java spring data mongo中的精确不区分大小写匹配,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我将spring数据用于mongo和一个存储库。例如: @Query("{ 'userName' : ?0 }") public User findByUsername(String username); 我想让这个不区分大小写。我使用了以下查询: "{'userName' : { $regex : ?0, $options: 'i' } }" 这是可行的,但它不仅匹配testUser,还匹配estUser 我也试过了 "{'userName' : { $regex : ^?0$, $opt

我将spring数据用于mongo和一个存储库。例如:

@Query("{ 'userName' : ?0 }")
public User findByUsername(String username);
我想让这个不区分大小写。我使用了以下查询:

"{'userName' : { $regex : ?0, $options: 'i' } }"
这是可行的,但它不仅匹配testUser,还匹配estUser

我也试过了

"{'userName' : { $regex : ^?0$, $options: 'i' } }"
但这无法解析查询,因为它试图在正则表达式中插入引号

com.mongodb.util.JSONParseException: 
({ $regex : ^"testUser"$, $options: 'i' }
            ^
如果我尝试使用/../I正则表达式,我也会遇到同样的问题


不必使用mongoTemplate或自己构造正则表达式,有什么解决方案吗?

最简单的方法可能是:

interface UserRepository extends Repository<User, BigInteger> {

   List<User> findByUsernameIgnoreCase(String username);
}
接口用户存储库扩展存储库{
列出findByUsernameIgnoreCase(字符串用户名);
}

我刚刚尝试了以下方法,效果不错

 @Query(value = "{'name': {$regex : '^?0$', $options: 'i'}}")
    List<Item> findItemsByNameRegexExactMatch(String name);
@Query(value=“{'name':{$regex:'^?0$,$options:'i'}”)
列出findItemsByNameRegexExactMatch(字符串名称);

在mongo db中使用文本搜索,请使用版本2.6+

^

Aggregation aggregation = newAggregation( match(Criteria.where("fieldName").regex("^"+searchText+"$","i")) );

您可能会想,Mongo的不区分大小写的搜索不能有效地进行。任何文档都必须进行评估。通常将数据存储在原始格式中,无论你认为什么都是可搜索的,比如用Unicode字符来转换所有的问题。你能解释一下这是怎么回事吗?@KanagaveluSugumar实际上没有实现。您可以阅读Spring数据存储库以及“神奇”方法的工作原理。这看起来很有帮助。