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.
$push
L'opérateur d'$pushagrégation renvoie un tableau de toutes les valeurs d'une expression spécifiée pour chaque groupe. Il est généralement utilisé au cours de l'$groupétape pour accumuler des valeurs dans un tableau.
Paramètres
-
expression: expression à évaluer pour chaque document du groupe.
Exemple (MongoDB Shell)
L'exemple suivant montre comment utiliser l'$pushopérateur pour collecter tous les noms de produits pour chaque catégorie.
Créez des exemples de documents
db.sales.insertMany([ { _id: 1, category: "Electronics", product: "Laptop", amount: 1200 }, { _id: 2, category: "Electronics", product: "Mouse", amount: 25 }, { _id: 3, category: "Furniture", product: "Desk", amount: 350 }, { _id: 4, category: "Furniture", product: "Chair", amount: 150 }, { _id: 5, category: "Electronics", product: "Keyboard", amount: 75 } ]);
Exemple de requête
db.sales.aggregate([ { $group: { _id: "$category", products: { $push: "$product" } } } ]);
Sortie
[
{ _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
{ _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
Exemple d'utilisation d'un opérateur de fenêtre (MongoDB Shell)
Nouveau depuis la version 8.0.2.
L'$pushopérateur peut également être utilisé comme opérateur de fenêtre dans la $setWindowFields scène. Dans ce contexte, il renvoie un tableau de toutes les valeurs de l'expression spécifiée pour les documents de chaque fenêtre, dans l'ordre de tri. 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.
Note
Lorsqu'il est utilisé comme opérateur de fenêtre dans$setWindowFields, $push est limité à 100 Mo de données intermédiaires. Une opération dépassant cette limite renvoie une erreur.
Créez des exemples de documents
db.purchases.insertMany([ { _id: 1, category: "Electronics", day: 1, product: "Laptop" }, { _id: 2, category: "Electronics", day: 2, product: "Mouse" }, { _id: 3, category: "Electronics", day: 3, product: "Keyboard" }, { _id: 4, category: "Furniture", day: 1, product: "Desk" }, { _id: 5, category: "Furniture", day: 2, product: "Chair" } ]);
Exemple de requête
L'exemple suivant partitionne les documents parcategory, trie chaque partition par day et renvoie une liste de product valeurs depuis le début de la partition jusqu'au document en cours.
db.purchases.aggregate([ { $setWindowFields: { partitionBy: "$category", sortBy: { day: 1 }, output: { productsSoFar: { $push: "$product", window: { documents: ["unbounded", "current"] } } } } } ]);
Sortie
[
{ "_id": 1, "category": "Electronics", "day": 1, "product": "Laptop", "productsSoFar": [ "Laptop" ] },
{ "_id": 2, "category": "Electronics", "day": 2, "product": "Mouse", "productsSoFar": [ "Laptop", "Mouse" ] },
{ "_id": 3, "category": "Electronics", "day": 3, "product": "Keyboard", "productsSoFar": [ "Laptop", "Mouse", "Keyboard" ] },
{ "_id": 4, "category": "Furniture", "day": 1, "product": "Desk", "productsSoFar": [ "Desk" ] },
{ "_id": 5, "category": "Furniture", "day": 2, "product": "Chair", "productsSoFar": [ "Desk", "Chair" ] }
]
Chaque document est complété par productsSoFar le tableau de toutes les product valeurs de sa partition depuis le début jusqu'au document en cours, dans l'ordre de tri.
Exemples de code
Pour afficher un exemple de code d'utilisation de l'$pushopé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) :