如何在 mongo 中的 $switch 语句中执行 $match

How to perform a $match inside $switch statement in mongo

我想在聚合查询中的 $switch 中执行搜索。我想持有一个变量并根据前端的数据更改它。如果那个变量 "com" 我想执行搜索。用简单的话我可以描述如下,

    let search="com"
    if(search=="com") {
      $match{
         com: {$regex: "search_data"}}
    }

这是我尝试执行任务的方式:

  {
    $match: {
      $expr: {
        $switch: {
          branches: [
            {
              case: {
                $eq: ['$search', 'com']
              },
              then: {
                com: { $regex: "serch_data" }
              }
            },
         ],
         default: {}
      }
    }
  }

您不应使用 $search,而应使用 case: { $eq: ['com', search ] }$search 引用文档中的字段。

并使用 $regexMatch 运算符,$regex 运算符在聚合管道中不支持。

{
  $match: {
    $expr: {
      $switch: {
        branches: [
          {
            case: {
              $eq: [
                "com",
                search // search variable
                
              ]
            },
            then: {
              $regexMatch: {
                input: "$com",
                regex: "serch_data"
              }
            }
          },
          
        ],
        default: {}
      }
    }
  }
}

Sample Mongo Playground