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à.
$ in basso N
Nuovo dalla versione 8.0.1.
Usa l'$bottomNaccumulatore nella $group fase per restituire gli ultimi N elementi all'interno di un gruppo in base a un ordinamento specificato. Se un gruppo contiene meno di N elementi, $bottomN restituisce tutti gli elementi del gruppo.
Parametri
-
n: un numero intero positivo o un'espressione che si risolve in uno, che specifica il numero di risultati finali da restituire per gruppo. -
sortBy: un documento che specifica il criterio di ordinamento.1Da utilizzare in ordine crescente o-1decrescente. -
output: un'espressione che specifica i campi da restituire da ciascuno degli ultimi N documenti.
Esempio (MongoDB Shell)
L'esempio seguente mostra come utilizzare l'$bottomNaccumulatore per trovare le ultime 2 vendite (quantità minima) per articolo in una raccolta vendite.
Crea documenti di esempio
db.sales.insertMany([ { item: "abc", quantity: 10, price: 5 }, { item: "abc", quantity: 7, price: 8 }, { item: "abc", quantity: 5, price: 10 }, { item: "xyz", quantity: 15, price: 3 }, { item: "xyz", quantity: 9, price: 6 }, { item: "xyz", quantity: 3, price: 12 } ])
Esempio di interrogazione
db.sales.aggregate([ { $group: { _id: "$item", bottomTwoSales: { $bottomN: { n: 2, sortBy: { quantity: -1 }, output: { quantity: "$quantity", price: "$price" } } } } } ])
Output
[
{ "_id": "xyz", "bottomTwoSales": [{ "quantity": 9, "price": 6 }, { "quantity": 3, "price": 12 }] },
{ "_id": "abc", "bottomTwoSales": [{ "quantity": 7, "price": 8 }, { "quantity": 5, "price": 10 }] }
]
Esempio di utilizzo dell'operatore di finestra (MongoDB Shell)
Nuovo dalla versione 8.0.2.
L'$bottomNoperatore può essere utilizzato anche come operatore di finestra nello $setWindowFields stage. In questo contesto, restituisce un array dei seguenti output N documenti (in base a quelli dell'operatoresortBy) tra i documenti di ciascuna 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, $bottomN è limitato a 100 MB di dati intermedi. Un'operazione che supera questo limite restituisce un errore.
Crea documenti di esempio
db.matchScores.insertMany([ { _id: 1, player: "Alice", round: 1, score: 20 }, { _id: 2, player: "Alice", round: 2, score: 35 }, { _id: 3, player: "Alice", round: 3, score: 28 }, { _id: 4, player: "Bob", round: 1, score: 15 }, { _id: 5, player: "Bob", round: 2, score: 40 } ]);
Esempio di interrogazione
L'esempio seguente suddivide i documenti in baseplayer, ordina ogni partizione in base round e restituisce i due round con il punteggio più basso visualizzati dall'inizio della partizione fino al documento corrente.
db.matchScores.aggregate([ { $setWindowFields: { partitionBy: "$player", sortBy: { round: 1 }, output: { bottomTwoRoundsSoFar: { $bottomN: { n: 2, sortBy: { score: -1 }, output: { round: "$round", score: "$score" } }, window: { documents: ["unbounded", "current"] } } } } } ]);
Output
[
{ "_id": 1, "player": "Alice", "round": 1, "score": 20, "bottomTwoRoundsSoFar": [{ "round": 1, "score": 20 }] },
{ "_id": 2, "player": "Alice", "round": 2, "score": 35, "bottomTwoRoundsSoFar": [{ "round": 2, "score": 35 }, { "round": 1, "score": 20 }] },
{ "_id": 3, "player": "Alice", "round": 3, "score": 28, "bottomTwoRoundsSoFar": [{ "round": 3, "score": 28 }, { "round": 1, "score": 20 }] },
{ "_id": 4, "player": "Bob", "round": 1, "score": 15, "bottomTwoRoundsSoFar": [{ "round": 1, "score": 15 }] },
{ "_id": 5, "player": "Bob", "round": 2, "score": 40, "bottomTwoRoundsSoFar": [{ "round": 2, "score": 40 }, { "round": 1, "score": 15 }] }
]
Ogni documento è arricchito dai due round con bottomTwoRoundsSoFar il punteggio più basso all'interno della relativa partizione fino al documento corrente incluso. Se la finestra contiene meno di due documenti, vengono restituiti tutti.
Esempi di codice
Per visualizzare un esempio di codice per l'utilizzo $bottomN 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):