Spring Data mongo case case insensitive

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

For example, in Oracle:

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

How can I make this request using spring-data mongo ?

Thanks in advance

+4
source share
4 answers

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

Using MongoTemplate

i case insensitive option.

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 dsl request (case sensitive)

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

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

-Regex , /, , .

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

, . . $regex $options, :

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

. : fooobar.com/questions/1157463/...

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

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

, .

+2

, , , - :

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

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

findUsersByUserName (String userName);

0

Source: https://habr.com/ru/post/1667274/


All Articles