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

问题描述 投票:8回答:4

我正在使用带有mongo的spring数据和一个存储库。例如:

@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,或自己构建正则表达式?

java spring mongodb spring-data spring-data-mongodb
4个回答
22
投票

最简单的方法可能就是:

interface UserRepository extends Repository<User, BigInteger> {

   List<User> findByUsernameIgnoreCase(String username);
}

11
投票

我只是尝试了以下内容,它对我有用。

 @Query(value = "{'name': {$regex : '^?0$', $options: 'i'}}")
    List<Item> findItemsByNameRegexExactMatch(String name);

1
投票

在mongo db中使用Text Search,请使用2.6+版本


1
投票

^为开始,$为结束

Aggregation aggregation = newAggregation( match(Criteria.where("fieldName").regex("^"+searchText+"$","i")) );
© www.soinside.com 2019 - 2024. All rights reserved.