Java spring data mongo中的精确不区分大小写匹配
我将spring数据用于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
@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数据存储库以及“神奇”方法的工作原理。这看起来很有帮助。