当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《SpringDatamongo不区分大小写,如查询》经验,为你挑选了2个好方法。

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

例如在Oracle中:

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

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

提前致谢



1> user2683814..:

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

使用MongoTemplate

i 不区分大小写的选项.

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

使用MongoRepository(区分大小写)

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

interface UserRepository extends MongoRepository {
     List findByUserNameRegex(String userName);
}

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

List users = 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);



2> 小智..:

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

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

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有