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

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

问题描述

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

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

例如在 Oracle 中:

For example in Oracle :

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

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

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

提前致谢

推荐答案

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

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

使用 MongoTemplate

Using MongoTemplate

i 不区分大小写的选项:

i option for case insensitive:

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

使用 MongoRepository(区分大小写)

Using MongoRepository (Case sensitive)

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

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

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

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天全站免登陆