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.
$sum
L'$sumopérateur d'Amazon DocumentDB renvoie la somme de l'expression spécifiée pour chaque document d'un groupe. Il s'agit d'un opérateur d'accumulateur de groupe qui est généralement utilisé dans l'étape $group d'un pipeline d'agrégation pour effectuer des calculs de sommation.
Paramètres
-
expression: expression numérique à additionner. Il peut s'agir d'un chemin de champ, d'une expression ou d'une constante.
Exemple (MongoDB Shell)
L'exemple suivant montre l'utilisation de l'$sumopérateur pour calculer le total des ventes pour chaque produit.
Créez des exemples de documents
db.sales.insertMany([ { product: "abc", price: 10, quantity: 2 }, { product: "abc", price: 10, quantity: 3 }, { product: "xyz", price: 20, quantity: 1 }, { product: "xyz", price: 20, quantity: 5 } ]);
Exemple de requête
db.sales.aggregate([ { $group: { _id: "$product", totalSales: { $sum: { $multiply: [ "$price", "$quantity" ] } } }} ]);
Sortie
[
{ "_id": "abc", "totalSales": 50 },
{ "_id": "xyz", "totalSales": 120 }
]
Exemple d'utilisation d'un opérateur de fenêtre (MongoDB Shell)
Nouveau depuis la version 8.0.2.
L'$sumopérateur peut également être utilisé comme opérateur de fenêtre dans la $setWindowFields scène. Dans ce contexte, il renvoie la somme de l'expression spécifiée pour les documents de chaque fenêtre. Vous spécifiez l'opérateur dans le output champ et définissez éventuellement les limites de la fenêtre à l'aide d'un window document.
Créez des exemples de documents
db.dailySales.insertMany([ { _id: 1, product: "abc", day: 1, amount: 10 }, { _id: 2, product: "abc", day: 2, amount: 20 }, { _id: 3, product: "abc", day: 3, amount: 15 }, { _id: 4, product: "xyz", day: 1, amount: 30 }, { _id: 5, product: "xyz", day: 2, amount: 25 } ]);
Exemple de requête
L'exemple suivant partitionne les documents parproduct, trie chaque partition par day et renvoie un total cumulé de amount depuis le début de la partition jusqu'au document actuel.
db.dailySales.aggregate([ { $setWindowFields: { partitionBy: "$product", sortBy: { day: 1 }, output: { runningTotal: { $sum: "$amount", window: { documents: ["unbounded", "current"] } } } } } ]);
Sortie
[
{ "_id": 1, "product": "abc", "day": 1, "amount": 10, "runningTotal": 10 },
{ "_id": 2, "product": "abc", "day": 2, "amount": 20, "runningTotal": 30 },
{ "_id": 3, "product": "abc", "day": 3, "amount": 15, "runningTotal": 45 },
{ "_id": 4, "product": "xyz", "day": 1, "amount": 30, "runningTotal": 30 },
{ "_id": 5, "product": "xyz", "day": 2, "amount": 25, "runningTotal": 55 }
]
Chaque document est augmenté runningTotal de amount la somme cumulée entre sa partition et le document actuel inclus.
Exemples de code
Pour afficher un exemple de code d'utilisation de l'$sumopérateur, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser. Les exemples suivants montrent à la fois l'utilisation de l'accumulateur (in$group) et l'utilisation de l'opérateur de fenêtre (in$setWindowFields) :