#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()
для сравнения без учета регистра.