Spring Data Mongo Query для запроса с несколькими полями и возврата в один вызов - PullRequest
0 голосов
/ 01 марта 2019

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

{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 .Я могу запросить все пары в списке таким образом.Но этот подход потребует большого количества обращений к базе данных, поскольку для каждой пары в списке имеется вызов базы данных.

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

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете использовать 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()])));
...