Поиск записей по значениям, содержащим заданные строки

#java #mongodb #spring-boot

Вопрос:

У меня есть коллекция:

 _id: ObjectId("11313123qeqerq")
products: Array
    0: Object
        name: "ABC-123"
 

Я хочу написать запрос по критериям Spring, который мог бы найти мне все продукты, содержащие названия («ABC», «DEF»).

Кто-нибудь может помочь мне с вопросом? Что-то в духе:

 query.addCriteria(where(products).elemMatch(where(name).in("ABC", "DEF"));
 

Ответ №1:

Ваш метод in() действительно проверяет точное равенство.
Вы должны использовать КАК в SQL. В критериях это переводится как like() :

 criteria.add(Restrictions.disjunction()
    .add(Restrictions.like("name", "ABC", MatchMode.ANYWHERE))
    .add(Restrictions.like("name", "DEF", MatchMode.ANYWHERE))
);
 

Критерий действительно ищет строки, содержащие либо ABC, либо DEF в любом месте.
Используйте ilike() для сравнения без учета регистра.