I have a database of students and their contact details. I'm trying to find out the postcode that houses the most students. The documents for the students look something like this...
{studentcode: 'smi0001', firstname: 'bob', surname: 'smith', postcode: 2001}
I thought I could use the aggregation framework to find out the postcode with the most students by doing something like...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
this works as expected (returns postcodes as _id and the number of students in each postcode as 'students', but if I add $sort to the pipeline it seems to try sorting by the whole student collection instead of the results of the $group operation.
what I'm trying look like...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
but it returns the whole collection and disregards the $project and $group...
Am I missing something? I thought I'd just be able to sort by descending number of students and return the first item.
Thanks in advance for any help.