Spring data mongo в условиях без учета регистра

У меня есть объекты со строковым полем, и я хочу найти все объекты, которые подходят (без учета регистра) к моему массиву со списком строк.

например

public class Person { 
   private String name;
}

List<String> list = Arrays.asList("teSt1", "tEsT2");

я могу создать такое состояние, как:

Criteria.where("name").in(list);

но я понятия не имею, как сделать его нечувствительным к регистру (связать его с регулярным выражением)

Спасибо за любую помощь

Если вы расширяете CrudRepository, вы можете попробовать создать метод под названием findByNameInIgnoreCase(List<String> names)

Joqus 10.08.2018 20:41

спасибо за ответ, я нашел это, но это не решение, это только часть метода, есть также критерии для ключевых слов и т. д.

Gwiazdek 10.08.2018 23:58

Взгляните на эти полезные ответы о criteriastackoverflow.com/a/44278901/8112217 и stackoverflow.com/a/44278967/8112217

tsarenkotxt 11.08.2018 06:11
1
3
1 836
1

Ответы 1

Думаю, так построить невозможно

db.getCollection('collection').find( { "field" : { "$in" : [{"$regex": '...', "$options": "i"}] } })

такой запрос возвращает ошибку, я понял решение, которое очень не оптимально, но работает. Просто создайте критерии регулярного выражения для всех значений списка и соедините его с помощью OR, например:

Criteria orCriteria = new Criteria();
Criteria[] regExList = new Criteria[list.size()];   
IntStream.range(0, list.size()).forEach(i -> {
    regExList[i] = Criteria.where("field").regex(list.get(i), "i");
});

orCriteria.orOperator(regExList);

Другие вопросы по теме