Sur un SGBD SQL standard, cela se ferait avec la requête suivante :
SELECT type, count(*) as ct FROM table GROUP BY type ORDER BY ct;
sur mongodb, cela se ferait en utilisant la fonction de groupe, bien que ce soit un peu plus compliqué :
db.collection.group(
{key: { "type":true},
reduce: function(obj,prev) { prev.count += 1; },
initial: { count: 0 }
});
Ici, je demande à la base de données de renvoyer des valeurs pour le "type" de clé (d'où le "vrai"), et pour chaque valeur, la fonction de réduction donnée sera utilisée pour agréger les enregistrements trouvés. Ici, je ne fais que mettre à jour le nombre de fois où chaque enregistrement apparaît. Si vous exécutez cette requête, vous obtiendrez quelque chose comme ceci :
[
{
"type" : "report",
"count" : 5
},
{
"type" : "memo",
"count" : 15
}
{
"type" : "research",
"count" : 3
}
]
Vous remarquerez que ce n'est pas ordonné; même les docs mongodb disent que le moyen le plus simple de le commander est de le faire côté client.
La documentation pertinente est ici .