Монго агрегатный запрос для пропуска пустых параметров в `$ match` - PullRequest
0 голосов
/ 09 июля 2019

У меня есть агрегатный запрос Монго, в котором я передаю переменные $device_name и $device_type

db.getCollection('devices').aggregate([
{ "$match" : {
    "name" : "$device_name",
    "deviceType": "$device_type"
  }
}]);

Однако, как часть запроса пользователя, любая из переменных $device_name или $device_type может быть пустой. Я хочу пропустить совпадение, соответствующее пустой переменной. Пример: если запрос имеет только $device_type, запрос должен соответствовать только для deviceType param и пропустить проверку для name.

Я знаю, что мы можем использовать filters для этого, но мне нужно использовать запрос агрегатора для этого из-за ограничений среды. Я пытался использовать $and, $ifNull, но мне не удалось получить желаемый результат.

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Вы можете проверить переменные перед назначением их в запрос на совпадение

let condition = {};
if(device_name != '')
condition.name = device_name;
if(device_type != '')
condition.deviceType = $device_type;

А затем передать динамическое условие для соответствия db.getCollection ('devices'). aggregate ([{"$ match": условие}]);

0 голосов
/ 09 июля 2019

Вы можете попробовать этот код

db.getCollection('devices').aggregate([
{ "$match" : {
    $or: [ 
      {"name": $device_name },
      {"deviceType": $device_type }
       ] 
  }
}]);  
...