Я использую 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, если фильтрация может увеличиться со временем?