Если свойство не существует, получить все записи - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать запрос, в котором пользователь выбирает несколько параметров, а затем мы фильтруем поиск на основе параметров. Данные немного странные, поскольку свойство в коллекции существует только для данных, добавленных с определенного года. У нас есть опция с названием null, если она выбрана, мы хотим добавить все записи, в которых это свойство не существует.

В настоящий момент мы создаем массив выбранных элементов и используем свойство mongodb in для сопоставления all.

if (isset($params["value"])) {
  $match = preg_match_all('/value=(\w+)/', $_SERVER['QUERY_STRING'], $matches);
  $valueArray = array();

  foreach($matches[1] as $i => $item) {
    if(in_array(strtoupper($item), ["EA", "EA2", "WD1"])){
      array_push($valueArray, strtoupper($item));
    }

  }      
  
  if ($match > 0){
    $matchPipeline["value"] = ['$in'=> $valueArray];
  }
}

Как мне обновить это, чтобы получить все записи, которые не имеют свойства value, если выбрано eitheir только 'Null' или выбрано в дополнение к другому значению, например ea

Edit - Возможное решение. Я создал переменную с именем $ null, если выбрана опция NULL.

  if ($match > 0){
    if($null == true){
      $matchPipeline['$or'] = [
        ["value" => ['$in'=> $valueArray]],
        ["value" => ['$exists' => false]],
      ];
    } else {
      $matchPipeline["value"] = ['$in'=> $valueArray];}
  }

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете справиться с этим, используя $ или в операторе сопоставления, если Null является выбранной опцией. Тогда массив $or будет содержать оператор $in, который у вас уже есть, в дополнение к оператору $ exists . Здесь вы должны указать поле и false, чтобы вернуть документы, в которых поле не существует.

...