我试图构建一个用户选择多个选项的查询,然后我们根据参数过滤搜索。 数据有点奇怪,其中集合中的属性只存在于自某一年以来添加的数据。 我们有一个名为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];}
}
如果null
是选定的选项,则可以通过在match语句中使用$OR来处理此问题。 除了$exists运算符之外,$或
数组还将包含您已经拥有的$in
运算符。 在这里,您可以指定字段和false
来返回不存在该字段的文档。