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()])));