Dans MongoDB, le $sortByCount
l'étape de pipeline d'agrégation regroupe les documents entrants en fonction de la valeur d'une expression spécifiée, puis calcule le nombre de documents dans chaque groupe distinct.
Chaque groupe est édité dans son propre document, composé de deux champs :
- un
_id
champ contenant la valeur de regroupement distincte, et - un
count
champ contenant le nombre de documents appartenant à ce groupe.
Les documents sont triés par count
par ordre décroissant.
Exemple
Supposons que nous ayons une collection appelée pets
avec les documents suivants :
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 } { "_id" : 8, "name" : "Tweet", "type" : "Bird", "weight" : 1 } { "_id" : 9, "name" : "Flutter", "type" : "Bird", "weight" : 2 }
Ci-dessous un exemple de requête qui utilise le $sortByCount
opérateur.
db.pets.aggregate([
{ $match: {} },
{ $sortByCount: "$type" }
])
Résultat :
{ "_id" : "Dog", "count" : 4 } { "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Bat", "count" : 1 }
Dans cet exemple, nous affichons chaque type d'animal, ainsi que le nombre d'animaux de chaque type respectif.
Cela équivaut à ce qui suit :
db.pets.aggregate([
{
$match: { }
},
{
$group: { _id: "$type", count: { $sum: 1 } }
},
{
$sort : { count : -1 }
}
])
Voici un autre exemple, mais avec des critères de filtrage supplémentaires.
db.pets.aggregate([
{
$match: { weight: { $lt: 15 } }
},
{
$sortByCount: "$type"
}
])
Résultat :
{ "_id" : "Cat", "count" : 2 } { "_id" : "Bird", "count" : 2 } { "_id" : "Dog", "count" : 1 } { "_id" : "Bat", "count" : 1 }
Cette fois, un seul chien est dans le document passé à $sortByCount
, parce que la première étape du pipeline a retiré les chiens d'un certain poids. Par conséquent, $sortByCount
compte simplement les nombres du document qui lui a été fourni, qui ne comprenait qu'un seul chien.
Plus d'informations
Consultez la documentation MongoDB pour plus d'informations.