MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Opérateur d'agrégation MongoDB $sortByCount

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.