Du hade det nästan...
db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {_id: -1}}
);
ger (jag har lagt till några testdata som matchar ditt exempel):
{
"result" : [
{
"_id" : 2003,
"students" : 3
},
{
"_id" : 2002,
"students" : 1
},
{
"_id" : 2001,
"students" : 2
}
],
"ok" : 1
}
Du hade en yttre {}
runt allt, vilket orsakade viss förvirring. Gruppen och sorteringen fungerade inte som separata operationer i pipelinen.
Du behövde egentligen inte projektet för det här fallet.
Uppdatera Du vill förmodligen sortera efter "studenter", som så, för att få de största postnumren (efter befolkning) först:
db.test.aggregate(
{$group: {_id: '$postcode', students: {$sum: 1}}},
{$sort: {students: -1}}
);