Definición
cursor.max()Importante
Método mongosh
Esta página documenta un método
mongosh. No se trata de la documentación de un controlador específico de un lenguaje, como Node.js.Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.
Especifica el límite superior exclusivo para un índice específico con el fin de restringir los resultados de
find().max()proporciona una forma de especificar un límite superior en índices de clave compuesta.
Parámetros
El método max() tiene el siguiente parámetro:
Parameter | Tipo | Descripción |
|---|---|---|
| Documento | El límite superior exclusivo para las claves de índice. |
El parámetro indexBounds tiene la siguiente forma de prototipo:
{ field1: <max value>, field2: <max value2> ... fieldN:<max valueN> }
Los campos corresponden a todas las claves de un índice en particular en orden.
Nota
Uso del índice
Para usar un índice con el método max(), debe usar el método hint() para especificar el índice que desea usar, excepto cuando la consulta find() sea una condición de igualdad en el campo _id.
Tip
max() existe principalmente para dar soporte al proceso mongos (fragmentación).
Compatibilidad
Este método está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente administrado para implementaciones de MongoDB en la nube.
Nota
Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre la compatibilidad de Atlas con todos los comandos, consulte Comandos no compatibles.
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
Interacción con la selección de índices
Dado que max() requiere un índice en un campo y obliga a la consulta a usar dicho índice, es posible que prefiera el operador $lt para la consulta, si es posible. Considere el siguiente ejemplo:
db.products.find( { _id: { $in: [ 6, 7 ] } } ).max( { price: Decimal128("1.39") } ).hint( { price: 1 } )
La consulta utilizará el índice en el campo price, aunque el índice en _id pueda ser mejor.
Límites del índice
Si utiliza max() con min() para especificar un rango:
max() sin min()
Los métodos min() y max() indican que el sistema debe evitar la planificación de consultas normal. Construyen un escaneo de índice donde los límites del índice se especifican explícitamente mediante los valores dados en min() y max().
Advertencia
Si uno de los dos límites no se especifica, el plan del query será una exploración de índice que no está delimitada en un lado. Esto puede degradar el rendimiento en comparación con una query que no contenga ninguno de los operadores, o una que use ambos operadores para restringir más rigurosamente el escaneo del índice.
Ejemplo
Nota
Debe especificar explícitamente el índice particular con el método hint() para ejecutar max() con la siguiente excepción: no necesita indicar si la consulta find() es una condición de igualdad en el campo { _id: <value> } de _id.
Para los siguientes ejemplos, crea una muestra de colección llamada products que contenga los siguientes documentos:
db.products.insertMany([ { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : Decimal128("1.99") }, { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") }, { "_id" : 3, "item" : "apple", "type" : "jonagold", "price" : Decimal128("1.29") }, { "_id" : 4, "item" : "apple", "type" : "jonathan", "price" : Decimal128("1.29") }, { "_id" : 5, "item" : "apple", "type" : "mcintosh", "price" : Decimal128("1.29") }, { "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") }, { "_id" : 7, "item" : "orange", "type" : "cara cara", "price" : Decimal128("2.99") }, { "_id" : 9, "item" : "orange", "type" : "satsuma", "price" : Decimal128("1.99") }, { "_id" : 8, "item" : "orange", "type" : "valencia", "price" : Decimal128("0.99") }, { "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") } ])
Crea los siguientes índices para la colección:
db.products.createIndexes( [ { "item" : 1, "type" : 1 }, { "item" : 1, "type" : -1 }, { "price" : 1 } ] )
Utilizando el ordenamiento del índice
{ item: 1, type: 1 },max()limita la consulta a los documentos que están por debajo del límite deitemigual aappleytypeigual ajonagold:db.products.find().max( { item: 'apple', type: 'jonagold' } ).hint( { item: 1, type: 1 } ) La query devuelve los siguientes documentos:
{ "_id" : 6, "item" : "apple", "type" : "cortland", "price" : Decimal128("1.29") } { "_id" : 2, "item" : "apple", "type" : "fuji", "price" : Decimal128("1.99") } { "_id" : 1, "item" : "apple", "type" : "honey crisp", "price" : Decimal128("1.99") } Utilizando el ordenamiento del índice
{ price: 1 },max()limita la consulta a los documentos que están por debajo del límite de la clave del índicepriceigual aDecimal128("1.99")ymin()limita la consulta a los documentos que están en o por encima del límite de la clave del índicepriceigual aDecimal128("1.39"):db.products.find().min( { price: Decimal128("1.39") } ).max( { price: Decimal128("1.99") } ).hint( { price: 1 } ) La query devuelve los siguientes documentos:
{ "_id" : 10, "item" : "orange", "type" : "navel", "price" : Decimal128("1.39") }