Spring Data mongo不区分大小写查询 [英] Spring Data mongo case insensitive like query

查看:1251
本文介绍了Spring Data mongo不区分大小写查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 spring-data mongo 对正则表达式查询进行不敏感的文本搜索。对于

在Oracle中的例子:

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



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



提前致谢

解决方案

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



使用MongoTemplate



  Criteria regex = Criteria 

。(username)。regex(*。ab。*,i);
mongoOperations.find(new Query()。addCriteria(regex),User.class);

使用MongoRepository(区分大小写)

 列表<使用者> users = userRepository.findByUserNameRegex(。* ab。*); 

接口UserRepository扩展了MongoRepository< User,String> {
列表<用户> findByUserNameRegex(String userName);

$ / code>

在查询dsl中使用MongoRepository(区分大小写)

 列表< User> users = userRepository.findByQuery(。* ab。*); 

接口UserRepository扩展了MongoRepository< User,String> {
@Query({'username':{$ regex:?0}}))
List< User> findByQuery(String userName);





$ b

对于基于非正则表达式的查询,您现在可以利用不区分大小写的搜索/排序

 查询查询=新查询(过滤器); 
query.collat​​ion(Collat​​ion.of(en)。
strength(Collat​​ion.ComparisonLevel.secondary()));
mongoTemplate.find(query,clazz,collection);


I want to make a text search case insensitive with regex query with spring-data mongo .

For example in Oracle :

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

How can i make this query with spring-data mongo ?

Thanks in advance

解决方案

You can try something like below. Assumes you have a User pojo class.

Using MongoTemplate

i option for case insensitive.

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

Using MongoRepository (Case sensitive)

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

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

Using MongoRepository with Query dsl (Case sensitive)

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

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

For Non-Regex based query you can now utilize case insensitive search/sort through collation with locale and strength set to primary or secondary.

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

这篇关于Spring Data mongo不区分大小写查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆