sql >> Base de Datos >  >> NoSQL >> MongoDB

3 formas de ordenar documentos en MongoDB

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.