Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
$push
L'operatore $push di aggregazione restituisce un array di tutti i valori di un'espressione specificata per ogni gruppo. In genere viene utilizzato all'interno dello $group stage per accumulare valori in una matrice.
Parametri
-
expression: L'espressione da valutare per ogni documento del gruppo.
Esempio (MongoDB Shell)
L'esempio seguente dimostra l'utilizzo dell'$pushoperatore per raccogliere tutti i nomi di prodotto per ciascuna categoria.
Crea documenti di esempio
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 } ]);
Esempio di interrogazione
db.sales.aggregate([ { $group: { _id: "$category", products: { $push: "$product" } } } ]);
Output
[
{ _id: 'Furniture', products: [ 'Desk', 'Chair' ] },
{ _id: 'Electronics', products: [ 'Laptop', 'Mouse', 'Keyboard' ] }
]
Esempio di utilizzo dell'operatore di finestra (MongoDB Shell)
Nuovo dalla versione 8.0.2.
L'$pushoperatore può essere utilizzato anche come operatore di finestra nello $setWindowFields stage. In questo contesto, restituisce una matrice di tutti i valori dell'espressione specificata per i documenti in ogni finestra, in ordine di ordinamento. Si specifica l'operatore sotto il output campo e, facoltativamente, si definiscono i confini della finestra con un window documento.
Nota
Se utilizzato come operatore di finestra in$setWindowFields, $push è limitato a 100 MB di dati intermedi. Un'operazione che supera questo limite restituisce un errore.
Crea documenti di esempio
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" } ]);
Esempio di interrogazione
L'esempio seguente suddivide i documenti in basecategory, ordina ogni partizione in base day e restituisce un elenco continuo di product valori dall'inizio della partizione fino al documento corrente.
db.purchases.aggregate([ { $setWindowFields: { partitionBy: "$category", sortBy: { day: 1 }, output: { productsSoFar: { $push: "$product", window: { documents: ["unbounded", "current"] } } } } } ]);
Output
[
{ "_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" ] }
]
Ogni documento è arricchito con productsSoFar l'array di tutti i product valori all'interno della partizione dall'inizio al documento corrente, in ordine di ordinamento.
Esempi di codice
Per visualizzare un esempio di codice per l'utilizzo $push dell'operatore, scegli la scheda corrispondente alla lingua che desideri utilizzare. Gli esempi seguenti mostrano sia l'utilizzo dell'accumulatore (in$group) che l'utilizzo dell'operatore di finestra (in$setWindowFields):