Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
$bucketAuto
Nouveau depuis la version 8.0.2.
L'étape d'$bucketAutoagrégation d'Amazon DocumentDB regroupe automatiquement les documents d'entrée dans un nombre spécifié de compartiments en fonction d'une expression spécifiée. Contrairement à $bucket la méthode où vous définissez explicitement les limites des compartiments, elle détermine $bucketAuto automatiquement les limites afin que les documents soient répartis de manière aussi uniforme que possible sur le nombre de compartiments demandé. Cela peut être utile lorsque vous souhaitez classer les données dans un nombre fixe de groupes sans connaître à l'avance la distribution des valeurs.
Paramètres
-
groupBy(obligatoire) : expression qui spécifie la valeur à utiliser pour le regroupement. -
buckets(obligatoire) : entier positif qui indique le nombre de compartiments dans lesquels les documents sont regroupés. En fonction des documents d'entrée et de l'groupByexpression, le nombre réel de compartiments peut être inférieur au nombre spécifié. -
output(facultatif) : objet qui spécifie les informations à générer pour chaque compartiment. Vous pouvez utiliser des opérateurs d'accumulateur tels que$sum,$avg$min, et$maxpour calculer les agrégations pour chaque compartiment. En cas d'omission, chaque compartiment génère uncountchamp par défaut. -
granularity(facultatif) : chaîne qui spécifie la série de nombres préférée à utiliser pour les limites du compartiment. Cela permet d'adapter les limites calculées à une progression numérique standard. Ce paramètre n'est disponible que si toutes lesgroupByvaleurs sont numériques et aucune d'entre elles ne l'estNaN. Les valeurs valides sont les suivantes :R5R10R20R40R80,1-2-5,E6,E12,E24E48,E96,E192, etPOWERSOF2.
Sortie
Chaque compartiment est renvoyé sous la forme d'un document distinct contenant un _id objet décrivant les limites du compartiment :
-
_id.min: La limite inférieure incluse du seau. -
_id.max: La limite supérieure du seau. Cette reliure est exclusive pour tous les compartiments, à l'exception du dernier compartiment de la série, où elle est incluse.
Exemple (MongoDB Shell)
L'exemple suivant montre comment utiliser le $bucketAuto stage pour regrouper les données de vente dans des catégories par prix.
Créez des exemples de documents
db.sales.insertMany([ { item: "abc", price: 10, quantity: 2, date: new Date("2020-09-01") }, { item: "def", price: 20, quantity: 1, date: new Date("2020-10-01") }, { item: "ghi", price: 5, quantity: 3, date: new Date("2020-11-01") }, { item: "jkl", price: 15, quantity: 2, date: new Date("2020-12-01") }, { item: "mno", price: 25, quantity: 1, date: new Date("2021-01-01") } ]);
Exemple de requête
La commande suivante regroupe les exemples de documents en trois catégories par prix :
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 3, output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
Sortie
La commande renvoie le résultat suivant :
[
{ _id: { min: 5, max: 15 }, count: 2, totalQuantity: 5 },
{ _id: { min: 15, max: 25 }, count: 2, totalQuantity: 3 },
{ _id: { min: 25, max: 25 }, count: 1, totalQuantity: 1 }
]
Exemple de requête avec granularité
L'exemple suivant ajoute l'granularityoption permettant d'adapter les limites de compartiment calculées à des puissances de 2.
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 2, granularity: "POWERSOF2", output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
Sortie
La commande renvoie le résultat suivant :
[
{ _id: { min: 4, max: 16 }, count: 3, totalQuantity: 7 },
{ _id: { min: 16, max: 32 }, count: 2, totalQuantity: 2 }
]
Exemples de code
Pour afficher un exemple de code d'utilisation de la $bucketAuto commande, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :