Les opérations d’agrégation traitent les enregistrements de données et renvoient des résultats calculés. Les opérations d’agrégation regroupent les valeurs de plusieurs documents et peuvent effectuer une variété d’opérations sur les données groupées pour renvoyer un seul résultat. En SQL count(*) et avec group by est un équivalent de l’agrégation MongoDB.
La méthode aggregate()
Pour l’agrégation dans MongoDB, vous devriez utiliser la méthode aggregate().
Syntaxe
La syntaxe de base de la méthode aggregate() est la suivante –
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Exemple
Dans la collection vous avez les données suivantes –
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: , likes: 750},
Maintenant à partir de la collection ci-dessus, si vous voulez afficher une liste indiquant combien de tutoriels sont écrits par chaque utilisateur, alors vous utiliserez la méthode aggregate() suivante –
> db.mycol.aggregate(){ "_id" : "tutorials point", "num_tutorial" : 2 }{ "_id" : "Neo4j", "num_tutorial" : 1 }>
La requête équivalente en sql pour le cas d’utilisation ci-dessus sera select by_user, count(*) from mycol group by_user.
Dans l’exemple ci-dessus, nous avons regroupé les documents par le champ by_user et à chaque occurrence de by user la valeur précédente de la somme est incrémentée. Voici une liste des expressions d’agrégation disponibles.
Expression | Description | Exemple |
---|---|---|
$sum | Somme la valeur définie de tous les documents de la collection. | db.mycol.aggregate() |
$avg | Calcule la moyenne de toutes les valeurs définies à partir de tous les documents de la collection. | db.mycol.aggregate() |
$min | Calcule le minimum des valeurs correspondantes à partir de tous les documents de la collection. | db.mycol.aggregate() |
$max | Atteint le maximum des valeurs correspondantes de tous les documents de la collection. | db.mycol.aggregate() |
$push | Insère la valeur dans un tableau dans le document résultant. | db.mycol.aggregate() |
$addToSet | Insère la valeur dans un tableau dans le document résultant mais ne crée pas de doublons. | db.mycol.aggregate() |
$first | Atteint le premier document des documents sources selon le regroupement. Typiquement, cela n’a de sens qu’avec une étape « $sort » appliquée précédemment. | db.mycol.aggregate() |
$last | Atteint le dernier document des documents sources en fonction du regroupement. Typiquement, cela n’a de sens qu’avec certains « $sort »-stage appliqués précédemment. | db.mycol.aggregate() |
Concept de pipeline
Dans la commande UNIX, le pipeline shell signifie la possibilité d’exécuter une opération sur une certaine entrée et d’utiliser la sortie comme entrée pour la commande suivante et ainsi de suite. MongoDB supporte également le même concept dans le cadre de l’agrégation. Il existe un ensemble d’étapes possibles et chacune d’entre elles est prise comme un ensemble de documents en entrée et produit un ensemble de documents (ou le document JSON final à la fin du pipeline). Ceci peut alors à son tour être utilisé pour l’étape suivante et ainsi de suite.
Suivant sont les étapes possibles dans le cadre d’agrégation –
-
$projet – Utilisé pour sélectionner certains champs spécifiques d’une collection.
-
$match – C’est une opération de filtrage et donc cela peut réduire la quantité de documents qui sont donnés en entrée à l’étape suivante.
-
$group – Cela fait l’agrégation réelle comme discuté ci-dessus.
-
$sort – Trie les documents.
-
$skip – Avec ceci, il est possible de sauter en avant dans la liste des documents pour une quantité donnée de documents.
-
$limit – Ceci limite la quantité de documents à regarder, par le nombre donné en partant des positions actuelles.
-
$unwind – Ceci est utilisé pour dérouler les documents qui utilisent des tableaux. Lors de l’utilisation d’un tableau, les données sont en quelque sorte pré-jointes et cette opération sera annulée avec ceci pour avoir à nouveau des documents individuels. Ainsi avec cette étape nous augmenterons la quantité de documents pour la prochaine étape.
.