Spring 数据 mongo 像查询一样不区分大小写

Spring Data mongo case insensitive like query

我想通过 spring-data mongo .

的正则表达式查询使文本搜索不区分大小写

例如在 Oracle 中:

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

如何使用 spring-data mongo 进行查询?

提前致谢

是的,你可以,只要你设置正确,我会在你的存储库方法中添加这样的东西:

{'username': {$regex: /ab/i }})

@Query("{'username': {$regex: /?1/i }})")

List findUsersByUserName(String userName);

您可以尝试如下操作。假设你有一个 User pojo class.

使用 MongoTemplate

i 不区分大小写的选项:

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

使用 MongoRepository(区分大小写)

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

interface UserRepository extends MongoRepository<User, String> {
     List<User> findByUserNameRegex(String userName);
}

将 MongoRepository 与查询 dsl 结合使用(区分大小写)

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

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

对于基于 Non-Regex 的查询,您现在可以使用不区分大小写的 search/sort 通过将区域设置和强度设置为主要或次要的整理:

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

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

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

查看原答案:

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

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

应该完美,它也适用于我的 projects.for 法语单词

对于数字字段(int 或 double)的类似查询

db.players.find({
  $and: [{
      "type": {
        $in: ["football"]
      }
    },
    {
      $where : "/^250.*/.test(this.salary)"
    }]
})

查看详细代码:

String tagName = "apple";

Query query = new Query();
query.limit(10);
query.addCriteria(Criteria.where("tagName").regex(tagName));

mongoOperation.find(query, Tags.class);

参考 - https://mkyong.com/mongodb/spring-data-mongodb-like-query-example/

在存储库模式中,我尝试了这个并成功了

@Query("{ 'username' : ?0 }.collat​​ion( { locale: 'en', strength: 2 } )")

用户 findByUserName(字符串名称);