фильтрация нескольких параметров во вложенном списке объектов с использованием QueryDSL с MongoDB - PullRequest
0 голосов
/ 29 апреля 2020

Я использую MongoDB и у меня есть коллекция объектов компании, в которой есть вложенная коллекция объектов страны.

Я хочу использовать фильтрацию для возврата списка компаний на основе нескольких параметров объектов страны во вложенном списке.

Упрощенный пример структур документа / коллекции:

[
  {
        "companyName": "company A",
        "activeCountries": [{
                "countryCode": "NL",
                "hasOffices": true
            },
            {
                "countryCode": "UK",
                "hasOffices": false
            }
        ]
    },
    {
        "companyName": "company B",
        "activeCountries": [{
                "countryCode": "NL",
                "hasOffices": false
            },
            {
                "countryCode": "UK",
                "hasOffices": false
            }
        ]
    }
]

До сих пор я пытался сделать это с помощью Query DSL, но не могу понять, как вернуть правильные результаты.

Я хочу отфильтровать компании с записями во вложенных коллекциях, которые имеют activeCountries.countryCode = 'NL' и activeCountries.hasOffices = true но созданный мной запрос, по-видимому, обрабатывает два фильтра как взаимоисключающие (как функция OR).

QCompany qCompany = QCompany.company;
BooleanBuilder where = new BooleanBuilder();

if(!Strings.isBlank(filters.getCountryCode())) {
            where.and(qCompany.activeCountries.any().countryCode.eq(filters.getCountryCode());
}

where.and(qCompany.activeCountries.any().hasOffices.eq(filters.hasOffices());

List<Company) cList = repository.findAll(where);

То, что я хочу сделать, это вернуть результаты для компаний, у которых есть запись в списке SupportCountries, которая соответствует обоим критериям.

Я действительно изо всех сил пытаюсь решить, как построить этот запрос правильно, поэтому любая помощь будет принята с благодарностью!

Кроме того, не уверен, что это лучший способ запросить в MongoDB для многогранного поиска, особенно lly, если фильтрация может увеличиться со временем?

...