opérations d'agrégation mongoDB
Annuaire d'articles
Les pipelines couramment utilisés pour l'agrégation mongoDB sont
- $match : filtrez le pipeline pour filtrer les données et ne sortez que les documents qui remplissent les conditions
- $group : regroupe les documents de la collection, qui peuvent être utilisés pour des résultats statistiques
- Pipeline de carte $project, sortie de carte
- $sort : trier le pipeline, trier les documents d'entrée et les sortir
- $limit : limite le pipeline, limite les documents renvoyés par le pipeline d'agrégation
- $skip : ignore le pipeline, ignore le nombre de documents spécifié et renvoie les documents restants
1. Préparer un ensemble de données
db.data.insertMany([{name:"Tom", city:"cityA",type:"aaa",num:609,age:18},
{name : "allen", city :"cityC", type: "bbb", num : 549,age:20},
{name :"jerry", city :"cityA", type :"bbb", num : 593,age:22},
{name :"frank", city : "cityB", type:"aaa", num : 657,age:21},
{name :"jack", city : "cityC", type:"aaa", num : 620,age:18},
{name :"alice", city : "cityB", type:"ccc", num : 584,age:20},
{name :"marry", city:"cityA", type:"bbb", num : 599,age:22}
])
db.data.find()
2. Pipeline de regroupement $group
2.1 Groupe unique statistique
Regroupez les villes et trouvez la moyenne du nombre pour chaque groupe.
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'}}})
2.2 Statistiques sur plusieurs groupes
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}})
3. Pipeline de filtrage $match
Le résultat de son action peut être transmis à ce dernier pipeline.
Regrouper les villes dont la ville n'est pas "villeC" (filtrer ""villeC") et le nombre moyen pour chaque groupe.
db.data.aggregate({$match:{city:{$ne:"cityC"}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
Regroupez les villes avec un âge ≥ 20 (filtrez "" cityC ") et trouvez la moyenne de num dans chaque groupe.
db.data.aggregate({$match:{age:{$gte:20}}},{$group:{_id:'$city',avg_num:{$avg:'$num'}}})
dans,
-
_id est la base du regroupement
-
avg_num est le nom du champ nouvellement défini
-
$avg est l'expression de la méthode d'évaluation, voici l'expression de la moyenne
-
grouper par spécifié par '$city'
-
'$num' spécifie la valeur requise du champ
Augmenter le nombre de statistiques
Si vous voulez compter le nombre de chaque groupe de données, vous pouvez utiliser $sum pour y parvenir.
La fonction de $sum est de trouver la somme d'un certain champ. Lorsque vous comptez avec $sum, comme le nombre de personnes dans chaque ville, cela peut s'écrire :
db.data.aggregate({$group:{_id:'$city',count:{$sum:1}}})
Autrement dit, le champ, la constante 1, est compté. S'il est écrit sous la forme {$sum:2}, le résultat du comptage est 4,4,6.
4. Pipeline de mappage $project
db.data.aggregate({$group:{_id:'$city',avg_num:{$avg:'$num'},avg_age:{$avg:'$age'}}},{$project:{avg_num:1}})
Comme le montre la figure, le résultat n'affiche plus avg_age, seuls _id et avg_num sont affichés.
5.$trier $ignorer $limite
- Trier par âge dans l'ordre décroissant, ignorer le premier et prendre les trois premières données
db.data.aggregate({$sort:{age:-1}},{$skip:1},{$limit:3})
- Trier par âge dans l'ordre décroissant, prendre les trois premières données, sauter la première,
db.data.aggregate({$sort:{age:-1}},{$limit:3},{$skip:1})
- Prenez les trois premières données, ignorez la première, puis triez par ordre décroissant
db.data.aggregate({$limit:3},{$skip:1},{$sort:{age:-1}})
La manière d'écrire le pipeline ne tient pas compte du problème de priorité, et il est exécuté séquentiellement de gauche à droite.
6. Supplément expressions courantes
$sum : calcule la somme, $sum:1 signifie un double comptage
$avg : calcule la moyenne
$min : obtient la valeur minimale
$max : obtient la valeur maximale
$push : insère la valeur dans un tableau dans le document de résultat Medium
$first : Récupère les données du premier document selon l'ordre des documents ressources
$last : Récupère les données du dernier document selon l'ordre des documents ressources