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

时间:2017-01-19 16:03:24

标签: full-text-search mongodb-query spring-data-mongodb

我希望使用Controller的正则表达式查询使文本搜索不区分大小写。

例如在Oracle中:

spring-data mongo

如何使用 select * from user where lower(username) like '%ab%' 进行此查询?

提前致谢

7 个答案:

答案 0 :(得分:11)

您可以尝试以下内容。假设你有一个User pojo类。

使用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);
}

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

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

答案 1 :(得分:8)

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

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

看到原来的答案: https://stackoverflow.com/a/19068401

答案 2 :(得分:3)

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

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

应该完美无缺,它适用于我的项目。也适用于法语单词

答案 3 :(得分:0)

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

{&#39;用户名&#39;:{$ regex:/ ab / i}})

  

@Query(&#34; {&#39;用户名&#39;:{$ regex:/?1 / i}})&#34;)

     

列出findUsersByUserName(String userName);

答案 4 :(得分:0)

对于数字字段(整数或双精度)的类似查询

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

查看详细代码:Spring Boot mongodb like query on int/double using mongotemplate

答案 5 :(得分:0)

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/

答案 6 :(得分:0)

在存储库模式中,我尝试了此方法并工作了

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

User findByUserName(String name);