Я понял, что должен был использовать .all()
, как в этом примере, чтобы убедиться, что все ингредиенты были в запрашиваемом списке, но, как упоминалось в комментариях, это не решает проблему без учета регистра:
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = Criteria.where("ingredients").all(recipeQuery.getIngredients());
query.addCriteria(categories);
}
это также решает проблему с кейсом
if (!recipeQuery.getIngredients().isEmpty()) {
Criteria categories = new Criteria();
categories.andOperator(recipeQuery.getIngredients().stream()
.map(i -> Criteria.where("ingredients").regex(".*" + i + ".*", "i"))
.toArray(Criteria[]::new));
query.addCriteria(categories);
}