$orderbyNota
Obsoleto desde v3.2
A partir de la versión3.2, el operador
$orderbyestá obsoleto enmongosh. Enmongosh, utilicecursor.sort()en su lugar.El operador ordena los resultados de una consulta en orden ascendente o
$orderbydescendente.mongoshproporciona elcursor.sort()método:db.collection.find().sort( { age: -1 } ) También puede especificar la opción en cualquiera de las siguientes formas:
db.collection.find()._addSpecial( "$orderby", { age : -1 } ) db.collection.find( { $query: {}, $orderby: { age : -1 } } ) Estos ejemplos devuelven todos los documentos de la colección
collectionordenados por elagecampo en orden descendente. Especifique un valor de$orderbyo menos uno (p. ej.,, como se indicó-1anteriormente) para ordenar en orden descendente o un valor positivo (p. ej.,)1para ordenar en orden ascendente.
Comportamiento
Dado que los índices contienen registros ordenados, MongoDB puede obtener los resultados de una ordenación a partir de un índice que incluya los campos de ordenación. MongoDB puede usar múltiples índices para una ordenación si esta utiliza los mismos índices que el predicado de consulta.
Si MongoDB no puede usar uno o más índices para obtener el orden de ordenación, debe realizar una ordenación por bloqueo de los datos. Esta ordenación indica que MongoDB debe consumir y procesar todos los documentos de entrada antes de devolver los resultados. Las ordenaciones por bloqueo no bloquean las operaciones concurrentes en la colección o la base de datos.
Las operaciones de ordenación que utilizan un índice suelen tener un mejor rendimiento que las ordenaciones por bloqueo. Para obtener más información sobre la creación de índices compatibles con las operaciones de ordenación, consulte Usar índices para ordenar los resultados de una consulta.
Si MongoDB requiere usar más de 100 megabytes de memoria del sistema para la operación de ordenamiento por bloqueo, MongoDB devuelve un error a menos que la consulta especifique cursor.allowDiskUse() (Nuevoen 4.4 MongoDB). permite a MongoDB usar archivos temporales enallowDiskUse() el disco para almacenar datos que excedan el 100 límite de memoria del sistema de megabytes mientras procesa una operación de ordenamiento por bloqueo.
Para evitar este error, cree un índice que admita la operación de ordenación o utilice $orderby junto con cursor.maxTimeMS() cursor.limit()o.cursor.limit() El valor aumenta la velocidad y reduce la cantidad de memoria necesaria para devolver esta consulta mediante un algoritmo optimizado. El límite especificado debe resultar en un número de documentos que se encuentre dentro del 100 límite de megabytes.