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à.
$first
Nuovo dalla versione 5.0.
Non supportato da Elastic Cluster.
L'$firstoperatore in Amazon DocumentDB restituisce il primo documento da un insieme raggruppato di documenti. Viene comunemente utilizzato nelle pipeline di aggregazione per recuperare il primo documento che corrisponde a una condizione specifica.
Parametri
-
expression: L'espressione da restituire come primo valore in ogni gruppo.
Esempio (MongoDB Shell)
L'esempio seguente dimostra l'uso dell'$firstoperatore per recuperare il valore del primo elemento riscontrato per ciascuna categoria durante l'aggregazione.
Nota: $first restituisce il primo documento in base all'ordine corrente dei documenti nella pipeline. Per garantire un ordine specifico (ad esempio, per data, prezzo, ecc.), è necessario utilizzare una $sort fase prima della $group fase.
Crea documenti di esempio
db.products.insertMany([ { _id: 1, item: "abc", price: 10, category: "food" }, { _id: 2, item: "jkl", price: 20, category: "food" }, { _id: 3, item: "xyz", price: 5, category: "toy" }, { _id: 4, item: "abc", price: 5, category: "toy" } ]);
Esempio di interrogazione
db.products.aggregate([ { $group: { _id: "$category", firstItem: { $first: "$item" } } } ]);
Output
[
{ "_id" : "food", "firstItem" : "abc" },
{ "_id" : "toy", "firstItem" : "xyz" }
]
Esempio di utilizzo dell'operatore di finestra (MongoDB Shell)
Nuovo dalla versione 8.0.2.
L'$firstoperatore può essere utilizzato anche come operatore di finestra nello $setWindowFields stage. In questo contesto, restituisce il valore expression del primo documento in ogni finestra. 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, $first è limitato a 100 MB di dati intermedi. Un'operazione che supera questo limite restituisce un errore.
Crea documenti di esempio
db.stockPrices.insertMany([ { _id: 1, ticker: "ABC", hour: 1, price: 50 }, { _id: 2, ticker: "ABC", hour: 2, price: 45 }, { _id: 3, ticker: "ABC", hour: 3, price: 60 }, { _id: 4, ticker: "ABC", hour: 4, price: 40 }, { _id: 5, ticker: "XYZ", hour: 1, price: 30 }, { _id: 6, ticker: "XYZ", hour: 2, price: 35 }, { _id: 7, ticker: "XYZ", hour: 3, price: 25 } ]);
Esempio di interrogazione
L'esempio seguente suddivide i documenti in baseticker, ordina ogni partizione in base hour e restituisce il primo (il primo) prezzo registrato in ciascuna partizione.
db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { firstPrice: { $first: "$price", window: { documents: ["unbounded", "current"] } } } } } ]);
Output
[
{ "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "firstPrice": 50 },
{ "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "firstPrice": 50 },
{ "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "firstPrice": 50 },
{ "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "firstPrice": 50 },
{ "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "firstPrice": 30 },
{ "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "firstPrice": 30 },
{ "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "firstPrice": 30 }
]
A ogni documento viene aggiunto il firstPrice prezzo del primo documento nella relativa finestra (il primo nella partizione). hour
Esempi di codice
Per visualizzare un esempio di codice per l'utilizzo $first 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):