2015-06-29 5 views
0

Я делаю курс MongoDB, и я нахожусь в первом упражнении 5-й недели. Первое упражнение состоит в том, чтобы получить автора, у которого больше комментариев.

Первое, что я сделал, было проверить, как выглядит данные и после того, как я начал писать запрос, и вот что у меня получилось:

db.posts.aggregatae([ 
    { $unwind: "$comments" }, 
    { $group: 
     { 
      _id: "$author", 
      num_posts:{ $sum:1 } 
     } 
    }, 
    { $sort: 
     { "num_posts": -1 } 
    } 
]); 

запросе работы и подсчитывает Num комментариев правильно, но когда я пытаюсь для сортировки результатов он не сработал. Я пытался изменить $group этап к этому:

{ $group: 
     { _id: "$author" }, 
     num_posts:{ $sum:1 } 
    } 

Но я получаю ошибку:

Error: command failed: { 
    "errmsg" : "exception": A pipeline state specification object must contain exactly 
    one field.", "code" : 16435, "ok" : 0 

ответ

0

Проблема с вашим запросом вы группированием по несуществующему ключу, вам нужна сгруппировать с помощью ключа автора комментариев, чтобы получить автора (из массива вложенных комментариев встроенных комментариев) с наибольшим количеством комментариев следующим образом:

db.posts.aggregate([ 
    { "$unwind": "$comments"}, 
    { 
     "$group": { 
      "_id": "$comments.author", 
      "num_posts": { "$sum": 1 } 
     } 
    }, 
    { 
     "$sort": { "num_posts": -1 } 
    }, 
    { "$limit": 1 } 
]);