View a markdown version of this page

$ mN - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$ mN

Nuevo a partir de la versión 8.0.1.

El $minN operador de Amazon DocumentDB devuelve los N valores más pequeños. Cuando se usa como acumulador en una $group etapa, devuelve una matriz con los N valores mínimos de cada grupo. Cuando se usa como operador de expresión matricial, devuelve los N elementos mínimos de una matriz.

Parámetros

  • input: una expresión que se convierte en la matriz o el campo desde el que se devuelven los n valores mínimos.

  • n: expresión que se resuelve en un entero positivo que especifica el número de valores mínimos que se devolverán.

Comportamiento

Comportamiento del operador de expresiones matriciales

  • No puede especificar un valor n inferior a1.

  • $minNfiltra los null valores que se encuentran en la input matriz.

  • Si el valor especificado n es mayor o igual al número de elementos de la input matriz, $minN devuelve todos los elementos de la input matriz.

  • Si se input resuelve en un valor que no es de matriz, se produce un error en la operación de agregación.

  • Si input contiene elementos numéricos y de cadena, los elementos numéricos se ordenan antes que los elementos de cadena según el orden de comparación de BSON.

Comportamiento del acumulador

  • Cuando se usa como acumulador, n debe ser una expresión integral positiva que sea una constante o que dependa del valor de. _id $group

  • $minNfiltra los valores nulos y faltantes.

  • Si el grupo contiene menos de n elementos, $minN devuelve todos los elementos del grupo.

  • $minNcompara los datos de entrada siguiendo el orden de comparación de BSON para determinar el tipo de salida apropiado. Cuando los datos de entrada contienen varios tipos de datos, el tipo $minN de salida es el más bajo del orden de comparación.

Orden de salida

$minNdevuelve valores sin ningún orden de clasificación en particular. Si es obligatorio garantizar un orden de clasificación determinado, utilícelo $bottomN en su lugar o envuelva el resultado con$sortArray.

Ejemplo (MongoDB Shell)

El siguiente ejemplo muestra cómo usar el $minN acumulador para recuperar las dos puntuaciones más bajas de cada asignatura.

Cree documentos de muestra

db.scores.insertMany([ { subject: "math", score: 85 }, { subject: "math", score: 72 }, { subject: "math", score: 93 }, { subject: "math", score: 68 }, { subject: "science", score: 90 }, { subject: "science", score: 78 }, { subject: "science", score: 65 }, { subject: "science", score: 88 } ]);

Ejemplo de consulta

db.scores.aggregate([ { $group: { _id: "$subject", lowestTwo: { $minN: { input: "$score", n: 2 } } } } ]);

Salida

[ { "_id": "math", "lowestTwo": [72, 68] }, { "_id": "science", "lowestTwo": [78, 65] } ]

Ejemplo de uso de expresiones (MongoDB Shell)

El $minN operador también se puede usar como expresión dentro de una $project etapa para devolver los N elementos más pequeños de un campo de matriz.

Crea documentos de muestra

db.readings.insertMany([ { _id: 1, sensor: "A", values: [45, 12, 78, 3, 56] }, { _id: 2, sensor: "B", values: [90, 23, 67, 11, 44] } ]);

Ejemplo de consulta

db.readings.aggregate([ { $project: { lowestThree: { $minN: { input: "$values", n: 3 } } }} ]);

Salida

[ { "_id": 1, "lowestThree": [45, 12, 3] }, { "_id": 2, "lowestThree": [44, 23, 11] } ]

Ejemplos de código

Para ver un ejemplo de código sobre el uso $minN del operador, elija la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran tanto el uso del acumulador (en$group) como el uso de expresiones (en$project):

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); try { await client.connect(); const db = client.db('test'); // Accumulator usage: N smallest values per group const scores = db.collection('scores'); const accumulatorResult = await scores.aggregate([ { $group: { _id: "$subject", lowestTwo: { $minN: { input: "$score", n: 2 } } } } ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Expression usage: N smallest elements from an array field const readings = db.collection('readings'); const expressionResult = await readings.aggregate([ { $project: { lowestThree: { $minN: { input: "$values", n: 3 } } } } ]).toArray(); console.log('Expression result:', expressionResult); } finally { await client.close(); } } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') try: db = client['test'] # Accumulator usage: N smallest values per group scores = db['scores'] accumulator_result = list(scores.aggregate([ { '$group': { '_id': '$subject', 'lowestTwo': { '$minN': { 'input': '$score', 'n': 2 } } } } ])) print('Accumulator result:', accumulator_result) # Expression usage: N smallest elements from an array field readings = db['readings'] expression_result = list(readings.aggregate([ { '$project': { 'lowestThree': { '$minN': { 'input': '$values', 'n': 3 } } } } ])) print('Expression result:', expression_result) finally: client.close() example()