我正在使用带有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,或自己构建正则表达式?
最简单的方法可能就是:
interface UserRepository extends Repository<User, BigInteger> {
List<User> findByUsernameIgnoreCase(String username);
}
我只是尝试了以下内容,它对我有用。
@Query(value = "{'name': {$regex : '^?0$', $options: 'i'}}")
List<Item> findItemsByNameRegexExactMatch(String name);
在mongo db中使用Text Search,请使用2.6+版本
^为开始,$为结束
Aggregation aggregation = newAggregation( match(Criteria.where("fieldName").regex("^"+searchText+"$","i")) );