mongodb agrégation de tri
J'ai une base de données des étudiants et de leurs coordonnées.
J'essaie de trouver le code postal qui abrite la plupart des étudiants.
Les documents pour les élèves ressembler à quelque chose comme ça...
{studentcode: 'smi0001', prenom: 'bob', nom: 'smith', code postal:
2001}
Je pensais que je pouvais utiliser l'agrégation de cadre pour trouver le code postal avec la plupart des élèves en faisant quelque chose comme...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
cela fonctionne comme prévu (les retours les codes postaux comme _id
et le nombre d'élèves dans chaque code postal comme "étudiants", mais si j'ajoute $sort
pour le pipeline, il semble essayer de tri par l'ensemble des étudiants de la collection au lieu de les résultats de la $group
opération.
ce que je suis en train de ressembler à...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
mais il renvoie à l'ensemble de la collection et ne tient pas compte de la $project
et $group
...
Ai-je raté quelque chose? Je pensais juste être capable de les trier par ordre décroissant de nombre d'étudiants et de retourner le premier élément.
Merci d'avance pour toute aide.
Vous devez vous connecter pour publier un commentaire.
C'est presque ça...
donne (j'ai ajouté quelques données de test correspondant à votre échantillon):
Vous avez eu l'extérieur
{}
autour de tout ce qui a provoqué une certaine confusion. Le regroupement et le tri ne fonctionnaient pas comme des opérations distinctes dans le pipeline.Vous n'avez pas vraiment besoin de ce projet pour ce cas.
Mise à jour Vous voulez probablement à trier par "étudiants", comme ça, pour obtenir le plus grand zipcodes (par la population) première:
field1
mais garder triés parfield2
.Je pense que votre syntaxe est légèrement erronée. Chaque opération d'agrégation dans le pipeline doit être son propre document.
Dans votre cas, il convient de:
Je l'ai testé sur un échantillon de la collection en fonction de votre schéma et cela fonctionne pour moi, tri groupé de codes postaux en nombre d'élèves, dans l'ordre décroissant.
$project
rien faire pour vous dans ce cas?