Definición
Tip
Sintaxis
$maxN tiene la siguiente sintaxis:
{ $maxN: { n: <expression>, input: <expression> } }
Comportamiento
No puedes especificar un valor de
nmenor que1.$maxNfiltra los valores denullencontrados en el arregloinput.Si el
nespecificado es mayor o igual al número de elementos en el arregloinput,$maxNdevuelve todos los elementos en el arregloinput.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 $maxN para recuperar las dos puntuaciones más altas de cada jugador. Las puntuaciones más altas se devuelven en el nuevo campo maxScores creado por $addFields.
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 ] }]