弹簧数据 mongo 中不区分大小写的精确匹配

我正在将春季数据与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,或者自己构建正则表达式?


答案 1

最简单的方法可能是这样的:

interface UserRepository extends Repository<User, BigInteger> {

   List<User> findByUsernameIgnoreCase(String username);
}

答案 2

我刚刚尝试了以下方法,它对我有用。

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