Definición
Tip
Sintaxis
$maxN tiene la siguiente sintaxis:
{ $maxN: { n: <expression>, input: <expression> } }
Comportamiento
No puedes especificar un valor de
nmenor que1.$maxNfiltranulllos valores encontrados en elinputarray.Si el especificado
nes mayor o igual que el número de elementos en elinputarray, devuelve todos los elementos en$maxNelinputarray.Si
inputresulta en un valor que no es un arreglo, la operación de agregación genera errores.Si
inputcontiene tanto elementos numéricos como de cadena, los elementos de cadena se ordenan antes que los numéricos de acuerdo con el orden de comparación BSON.
Ejemplo
Crea una colección scores con los siguientes documentos:
db.scores.insertMany([ { "playerId" : 1, "score" : [ 1, 2, 3 ] }, { "playerId" : 2, "score" : [ 12, 90, 7, 89, 8 ] }, { "playerId" : 3, "score" : [ null ] }, { "playerId" : 4, "score" : [ ] } { "playerId" : 5, "score" : [ 1293, "2", 3489, 9 ]} ])
El siguiente ejemplo utiliza el operador para recuperar las dos puntuaciones más altas de cada jugador. Las puntuaciones más altas se devuelven en el nuevo $maxN campo maxScores creado $addFields por.
db.scores.aggregate([ { $addFields: { maxScores: { $maxN: { n: 2, input: "$score" } } } } ])
La operación devuelve los siguientes resultados:
[{ "playerId": 1, "score": [ 1, 2, 3 ], "maxScores": [ 3, 2 ] }, { "playerId": 2, "score": [ 12, 90, 7, 89, 8 ], "maxScores": [ 90, 89 ] }, { "playerId": 3, "score": [ null ], "maxScores": [ ] }, { "playerId": 4, "score": [ ], "maxScores": [ ] }, { "playerId": 5, "score": [ 1293, "2", 3489, 9 ], "maxScores": [ "2", 3489 ] }]