我想用正则表达式查询使文本搜索大小写不敏感spring-data mongo
.
例如在Oracle中:
select * from user where lower(username) like '%ab%'
我该如何进行此查询spring-data mongo
?
提前致谢
你可以试试下面的东西.假设你有一个User
pojo课程.
使用MongoTemplate
i
不区分大小写的选项.
Criteria regex = Criteria.where("username").regex("*.ab.*", "i"); mongoOperations.find(new Query().addCriteria(regex), User.class);
使用MongoRepository(区分大小写)
Listusers = userRepository.findByUserNameRegex(".*ab.*"); interface UserRepository extends MongoRepository { List findByUserNameRegex(String userName); }
将MongoRepository与Query dsl一起使用(区分大小写)
Listusers = userRepository.findByQuery(".*ab.*"); interface UserRepository extends MongoRepository { @Query("{'username': {$regex: ?0 }})") List findByQuery(String userName); }
对于基于非正则表达式的查询,您现在可以使用不区分大小写的搜索/排序,并将区域设置和强度设置为主要或次要.
Query query = new Query(filter); query.collation(Collation.of("en"). strength(Collation.ComparisonLevel.secondary())); mongoTemplate.find(query,clazz,collection);
我知道这是一个老问题.我刚在另一篇文章中找到了解决方案.使用$ regex和$ options如下:
@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);
请参阅原始答案:https: //stackoverflow.com/a/19068401