Spring Data Mongo Query для запроса с несколькими полями и возврата в один вызов

Во-первых, запрашиваемая схема документа выглядит следующим образом:

{x:10, y:"temp", z:20} 

В коллекции есть несколько других документов с той же схемой, что и выше.

Теперь у меня есть список, в котором содержится каждый элемент, пара значений, принадлежащих ключам x и y. Это можно изобразить как:

       [{10,"temp"}, {20,"temp1"}, .....] 
keys ->  x    y        x    y

Теперь, я знаю, что если я обработаю массив в цикле и возьму каждую пару, я могу построить запрос следующим образом:

query.addCriteria(Criteria.where("x").is(10).and("y").is("temp"))

Это вернет документ, если он соответствует критериям AND. Я могу запросить все пары в списке таким образом. Но этот подход потребует большого количества обращений к базе данных, так как для каждой пары в списке есть вызов из базы данных.

Чтобы избежать этого, можно ли каким-либо образом запросить все документы, которые соответствуют критериям AND для каждого элемента в списке, за один вызов, используя данные Spring MongoDb Api? По-другому, я хочу избежать циклического перемещения по массиву и, если возможно, совершать множественные вызовы.

1 ответ

Вы можете использовать Criteria.orOperator для возврата каждого документа, который соответствует хотя бы одному критерию из вашего списка.

Создайте свой список Критерии зацикливая свой список

List<Criteria> criteriaList = new ArrayList<>();
for (item : yourList) {
  criteriaList.add(Criteria.where("x").is(item.x).and("y").is(item.y));
}

Создайте свой запрос, используя orOperator:

Query.query(new Criteria.orOperator(criteriaList.toArray(new Criteria[criteriaList.size()])));
Другие вопросы по тегам