У меня есть большая поисковая форма на моем веб-сайте с 10 + дополнительными параметрами поиска.Мне нужно вернуть все документы из MongoDB, которые соответствуют тем полям формы, которые присутствуют в каждом поиске.
Один из способов достижения желаемых результатов - написать оператор if if для каждой возможной комбинации непустых полей поиска по порядку, но должен быть лучший способ.
ex.
const sQ = new TMDLs(request.body);
}else if(sQ.Basin && sQ.Water_Body_Name && sQ.Water_Body_ID){
searchData = await TMDLs.aggregate([
{ $match: { $text: {$search: `\"${sQ.Basin}\"`}}},
{ $match: { Water_Body_Name: sQ.Water_Body_Name}},
{ $match: { Water_Body_ID: sQ.Water_Body_ID}}
]);
}else if(sQ.Basin && sQ.Water_Body_Name){
searchData = await TMDLs.aggregate([
{ $match: { Basin: sQ.Basin }},
{ $match: {Water_Body_Name: sQ.Water_Body_Name}}
]);
Кодвыше работает, но нецелесообразно пробовать каждую комбинацию непустых параметров поиска.Мне нужны результаты агрегации, чтобы вернуть все записи, которые соответствуют непустым полям поиска.
Я пробовал $ ifNull, $ существующие, $ group, $ project и многие другие условные операторы, но я не могу найтивсе, что решает эту проблему.