提问者:小点点

如果属性不存在,则获取所有记录


我试图构建一个用户选择多个选项的查询,然后我们根据参数过滤搜索。 数据有点奇怪,其中集合中的属性只存在于自某一年以来添加的数据。 我们有一个名为null的选项,如果选中了这个选项,我们希望添加不存在这个属性的所有记录。

目前,我们构建一个选定元素的数组,并使用mongodb in属性匹配所有元素。

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];
  }
}

如果只选择了'NULL',或者选择了另一个值(如ea),我将如何更新它以获得所有没有值属性的记录

编辑-可能的解决方案。 如果选择了NULL选项,我创建了一个名为$NULL的变量。

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

共1个答案

匿名用户

如果null是选定的选项,则可以通过在match语句中使用$OR来处理此问题。 除了$exists运算符之外,$或数组还将包含您已经拥有的$in运算符。 在这里,您可以指定字段和false来返回不存在该字段的文档。