Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose聚合$match中的多个动态字段_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose聚合$match中的多个动态字段

Node.js Mongoose聚合$match中的多个动态字段,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个关于如何监视聚合多个$match的问题 例如,我有一条路线-> api/job/filter/$id_job_position/$job_status/$id_city $id_job_position is ObjectId $job_status is Full Time, Part Time or Freelance $id_city is ObjectId 我的聚合代码: db.job.aggregate([ { $match: { job

我有一个关于如何监视聚合多个$match的问题

例如,我有一条路线->

api/job/filter/$id_job_position/$job_status/$id_city
$id_job_position is ObjectId
$job_status is Full Time, Part Time or Freelance
$id_city is ObjectId
我的聚合代码:

    db.job.aggregate([
      { $match: { 
        job_position: ObjectId(id_job_position),
        city: ObjectId(id_city),
        job_status: job_status,
        show: true,
      }},
    ])
但当用户只填写$id\u job\u position时,返回错误,因为$job\u status是无数据的,并且错误“传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串”,因为它的ObjectId

我希望它灵活,例如,如果用户只填写$job_status,那么我的聚合就是仅运行job_status选择数据

代码将变成这样:

db.job.aggregate([{$match:{job\u status:job\u status,show:true}])


我不知道怎么做。感谢您的光临。

只需创建一个查询对象并根据您的需求填写所需的属性即可

const userInput = {};
const query = {};
    
if (userInput.job_position) query.job_position = userInput.job_position    
if (userInput.job_status) query.job_status = userInput.job_status
    
db.job.aggregate([{ $match: query}])