MongoDB proporciona algunas formas de ordenar documentos en un orden particular. Cada uno de estos nos permite ordenar los documentos en orden ascendente o descendente.
También existe la opción de ordenar los resultados de un $text
búsqueda:ordenar por el textScore
calculado metadatos en orden descendente.
Aquí hay 3 formas de ordenar documentos en MongoDB.
El cursor.sort()
Método
El cursor.sort()
El método especifica el orden en que la consulta devuelve documentos coincidentes.
Supongamos que tenemos una colección llamada employees
con los siguientes documentos:
{ "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 }
Aquí hay un ejemplo de cómo devolver esos documentos ordenados por su salary
campo en orden ascendente, y también su _id
campo:
db.employees.find().sort( { salary: 1, _id: 1 } )
Resultado:
{ "_id" : 6, "name" : "Homer", "salary" : 1 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 }
Aquí, usamos 1
por orden ascendente. Si lo quisiéramos en orden descendente, simplemente usaríamos -1
en su lugar.
La razón por la que incluí el _id
en el pedido se debe a que, si dos o más empleados tienen el mismo salario, entonces el _id
El campo se puede usar para ordenar esos documentos entre ellos.
Si bien esto puede parecer trivial, evitará que MongoDB devuelva esos documentos en un orden diferente cada vez que ejecutemos la consulta.
También puede ordenar los resultados de un $text
búsqueda. Ver MongoDB sort()
para un ejemplo.
El $sort
Etapa de canalización de agregación
Al usar el marco de canalización de agregación, puede usar el $sort
etapa para ordenar todos los documentos de entrada y devolverlos a la canalización en orden ordenado.
Así es como podemos usar $sort
para devolver el mismo resultado que el ejemplo anterior. Excepto, vamos a ordenarlos en descendente ordenar esta vez:
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
Resultado:
{ "_id" : 7, "name" : "Bartholomew", "salary" : 1582000 } { "_id" : 9, "name" : "Xena", "salary" : 382000 } { "_id" : 8, "name" : "Zoro", "salary" : 300000 } { "_id" : 2, "name" : "Sarah", "salary" : 128000 } { "_id" : 5, "name" : "Beck", "salary" : 82000 } { "_id" : 1, "name" : "Bob", "salary" : 55000 } { "_id" : 4, "name" : "Christopher", "salary" : 45000 } { "_id" : 3, "name" : "Fritz", "salary" : 25000 } { "_id" : 6, "name" : "Homer", "salary" : 1 }
También puede ordenar los resultados de un $text
búsqueda. Ver MongoDB $sort
para un ejemplo.
El $orderBy
Modificador de consulta
El $orderBy
El modificador de consulta se puede utilizar en una de dos formas.
Así:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
O así::
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
El $orderBy
el modificador de consulta ha quedado obsoleto en mongo
shell desde v3.2, pero decidí incluirlo aquí de todos modos. Consulte la documentación de MongoDB para obtener más información.