我有一个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
,但未能获得理想的结果。
答案 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 }
]
}
}]);