Mongodb - $ sort - Объект спецификации этапа конвейера должен содержать ровно одно поле - PullRequest
0 голосов
/ 07 октября 2019

Я работаю над агрегацией в 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 голосов
/ 07 октября 2019

В запросе есть проблема с скобками ступени конвейера

Правильное расположение должно быть

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

Вы получаете сообщение об ошибке «Объект спецификации ступени конвейера должен содержать ровно одно поле»потому что есть некоторые нераспознанные этапы конвейера , потому что открывающие и закрывающие скобки не совпадают.

Во-вторых, поскольку вы сортируете по "based_year" , оно должно быть добавлено в $ group stage в противном случае результат курсора не будет иметь поля "based_year" и не будет сортироваться по отношению к "based_year".

Кроме того, вы должны использовать $group accumulators на этапе $ group.

Пожалуйста, поделитесь, если у вас все еще есть проблемы,

...