【问题标题】:Unrecognized expression '$regex inside $project$project 中无法识别的表达式'$regex
【发布时间】:2019-06-20 01:35:26
【问题描述】:

您好,我尝试按 _id 对所有元素进行分组,这在所有情况下都相同

db.movies.aggregate([
{
    $project:{
        _id:{
            award:{$cond:[
                {$and:[{awards:{$regex:/win/}}]}
                ]}
        },
    imdb:1
    }
},
{
    $group:{
        highest_rating:{$max:'$imdb.rating'},
        lowest_rating:{$min:'$imdb.rating'},
        average_rating:{$avg:'$imdb.rating'},
        deviation:{$stdDevPop:'$imdb.rating'}
    }
}
])

但反应是它的

{
"message" : "Unrecognized expression '$regex'",
"operationTime" : "Timestamp(1560994467, 1)",
"ok" : 0,
"code" : 168,
"codeName" : "InvalidPipelineOperator",
"$clusterTime" : {
    "clusterTime" : "Timestamp(1560994467, 1)",
    "signature" : {
        "hash" : "++GYj/cVU+Xk2bYmDYAowZfrhWw=",
        "keyId" : "6661714504839069697"
    }
},
"name" : "MongoError"

} 我做错了什么?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    你不能在 $cond 中使用 $regex。 Jira 中存在与此特定问题相关的问题,您可以在此处查看:
    https://jira.mongodb.org/browse/SERVER-8892

    【讨论】:

      【解决方案2】:

      对于发现此问题的人(例如我),该问题已在 2019 年 5 月 (https://jira.mongodb.org/browse/SERVER-11947) 得到纠正,您应该改用 $regexMatch

      db.coll.aggregate([{
          $project: {
              region: {
                  $cond: {
                      if: {
                          $regexMatch: {
                              input: “$phoneNumber”,
                              regex: “^212.*$”,
                          }               
                      }
                       then: "New York",
                      else: "Somewhere Else"
                  }
              }
          }
      }])
      

      【讨论】:

        【解决方案3】:

        在不允许使用 $regex 组中,我将查询从 $group 中的 $regex 更改为 $match

         db.movies.aggregate([
          {
            $match: {
              $and: [
                { awards: { $exists: true } },
                { awards: { $regex: /Won/ } },
                {
                  $or: [
                    { awards: { $regex: /Oscar/ } },
                    { awards: { $regex: /Oscars/ } }
        
                  ]
                }
              ]
            }
          },
          {
            $addFields: {
              exists: 1,
            }
          },
          {
            $group: {
              _id: "$exists",
              highest_rating: { $max: '$imdb.rating' },
              lowest_rating: { $min: '$imdb.rating' },
              average_rating: { $avg: '$imdb.rating' },
              deviation: { $stdDevPop: '$imdb.rating' }
            }
          }
        ])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-20
          • 2023-03-06
          相关资源
          最近更新 更多