Spring Data mongo不区分大小写,如查询

Akn*_*glu 9 full-text-search mongodb-query spring-data-mongodb

我想用正则表达式查询使文本搜索大小写不敏感spring-data mongo .

例如在Oracle中:

select * from user where lower(username) like '%ab%'

我该如何进行此查询spring-data mongo

提前致谢

use*_*814 15

你可以试试下面的东西.假设你有一个Userpojo课程.

使用MongoTemplate

i 不区分大小写的选项.

Criteria regex = Criteria.where("username").regex("*.ab.*", "i");
mongoOperations.find(new Query().addCriteria(regex), User.class);
Run Code Online (Sandbox Code Playgroud)

使用MongoRepository(区分大小写)

List<User> users = userRepository.findByUserNameRegex(".*ab.*");

interface UserRepository extends MongoRepository<User, String> {
     List<User> findByUserNameRegex(String userName);
}
Run Code Online (Sandbox Code Playgroud)

将MongoRepository与Query dsl一起使用(区分大小写)

List<User> users = userRepository.findByQuery(".*ab.*");

interface UserRepository extends MongoRepository<User, String> {
     @Query("{'username': {$regex: ?0 }})")
     List<User> findByQuery(String userName);
}
Run Code Online (Sandbox Code Playgroud)

对于基于非正则表达式的查询,您现在可以使用不区分大小写的搜索/排序,并将区域设置和强度设置为主要或次要.

Query query = new Query(filter);
query.collation(Collation.of("en").
                  strength(Collation.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);
Run Code Online (Sandbox Code Playgroud)


Art*_*emi 10

我知道这是一个老问题.我刚在另一篇文章中找到了解决方案.使用$ regex和$ options如下:

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);
Run Code Online (Sandbox Code Playgroud)

请参阅原始答案:https: //stackoverflow.com/a/19068401

  • 如果您的正则表达式是“test”,这将返回标题为“test1”、“test2”等的文档。 (2认同)

小智 5

@Repository
public interface CompetenceRepository extends MongoRepository<Competence, String> {

    @Query("{ 'titre' : { '$regex' : ?0 , $options: 'i'}}")
    List<Competence> findAllByTitreLikeMotcle(String motCle);
}
Run Code Online (Sandbox Code Playgroud)

应该可以完美运行,它适用于我的项目。对于法语单词也是如此