Mongodb-$ sort-管道阶段规范对象必须只包含一个字段

时间:2019-10-07 03:33:29

标签: mongodb aggregation-framework

我正在mongodb中进行聚合,并从下面的代码中获得“管道阶段规范对象必须恰好包含一个字段”

    db.HomeworkAggregate.aggregate([
    {
      $match:{
        number_of_employees:{
          $lte:500}},
          founded_year:{
            $gte:2000}},
          {$group: {
            _id: "$name"}, 
            description:"$description"},
            {$sort:{
              founded_year:1}}

])

我不确定是什么原因造成的,并且已经使用它一段时间了,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

查询中的管道阶段括号有问题

正确的安排应该是

db.HomeworkAggregate.aggregate([
        {$match:{
            number_of_employees:{
                $lte: 500
            },
            founded_year:{
                $gte: 2000
            }
        }},
        {$group: {
            _id: "$name", 
            description: {$first: "$description"} // you can use other operators also
            founded_year: {$first: "$founded_year"}
        }},
        {$sort:{
            founded_year: 1
        }}
    ])

您会收到一条错误消息,“管道阶段规范对象必须只包含一个字段”,因为某些无法识别的管道阶段,因为左括号和右括号不匹配。

第二,当您按“ founded_year”排序时,应将其添加到$ group阶段;否则,光标结果将没有“ founded_year”字段,并且不会针对“ founded_year”进行排序“。

此外,您应该在$ group阶段使用$group accumulators

如果您仍然遇到任何问题,请分享,