【问题标题】:Mongoose Aggregation multiple dynamic fields in $matchMongoose 聚合 $match 中的多个动态字段
【发布时间】:2021-07-21 06:34:38
【问题描述】:

我有一个关于如何聚合多个 $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_job_position 然后返回错误,因为 $job_status 没有数据,并且错误“传入的参数必须是单个 12 字节的字符串或 24 个十六进制字符的字符串”,因为它的 ObjectId。

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

而代码会变成这样:

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

我不知道怎么做。之前谢谢。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      相关资源
      最近更新 更多