Mongo聚合查询以跳过$ match中的空参数

时间:2019-07-09 13:59:08

标签: mongodb mongodb-query aggregation-framework

我有一个mongo聚合查询,其中我传递了变量$device_name$device_type

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

但是,作为用户请求的一部分,变量$device_name$device_type可以为空。我想跳过与空变量对应的匹配项。 示例:如果请求仅包含$device_type,则查询仅应匹配deviceType参数,并跳过name的检查。

我知道我们可以为此使用filters,但是由于环境限制,我需要为此使用聚合查询。 我尝试使用$and$ifNull,但未能获得理想的结果。

2 个答案:

答案 0 :(得分:1)

您可以先检查变量,然后再将其分配给匹配查询

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

然后传递动态条件以进行匹配 db.getCollection('devices')。aggregate([[“ $ match”:condition}]);

答案 1 :(得分:0)

您可以尝试此代码

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