A la hora de realizar una consulta podemos encontrarnos la necesidad de realizar una ordenación de los datos. Ya que si no decimos nada las consultas en MongoDB devolverán los datos tal cual se encuentren almacenados en la base de datos, es decir, con su orden de inserción.
Así si queremos realizar ordenaciones en MongoDB deberemos de utilizar el método .sort(). La sintaxis del método MongoDB .sort() es la siguiente:
db.coleccion.find(filtro).sort(ordenacion);
En la ordenación indicaremos el campo o los campos por los cuales queremos ordenar. De ifual forma indicaremos el tipo de ordenación que queremos: ordenación ascendente u ordenación ascendente.
La estructura de la ordenación es la siguiente:
.sort({campo1:tipoordencion,campo2:tipoordenacion,...,campoN:tipoordenacion});
Dónde los tipos de ordenación y sus valores son:
- Ascendente: 1
- Descendente: -1
Así que partiendo de nuestra colección de ciudades:
{ "_id" : ObjectId("525ab02733b01a66a9dcbc5b"), "ciudad" : "Madrid", "habitantes" : 3233527 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5c"), "ciudad" : "Barcelona", "habitantes" : 1620943 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5d"), "ciudad" : "Valencia", "habitantes" : 797028 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5e"), "ciudad" : "Sevilla", "habitantes" : 702355 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5f"), "ciudad" : "Zaragoza", "habitantes" : 679624 }
Podemos realizar las siguientes ordenaciones en MongoDB. Si queremos ordenar las ciudades de forma ascendente escribiremos:
cursor = db.ciudades.find().sort({ciudad:1});
Por el contrario, si queremos ordenar las ciudades de forma descendente:
cursor = db.ciudades.find().sort({ciudad:-1});
Las ordenaciones en MongoDB solo se pueden realizar con tamaños menores a 32Mb. En caso contrario hay que utilizar el método .limit() para acortarlas.
La consulta realizada con el método .find() puede tener un filtro:
cursor = db.ciudades.find({ciudad:/^M/}).sort({ciudad:-1});
En este caso se ordenaria el subconjunto de documentos devueltos por la consulta filtrada.
Podemos establecer varios campos de ordenación, los cuales se ejecutarían en el orden en el que están establecidos:
cursor = db.ciudades.find().sort({ciudad:-1,habitantes:1});
De igual manera podemos seguir concatenando métodos en la consulta y podemos limitar el número de documentos a devolver después de haber utilizado el método .sort().
cursor = db.ciudades.find().sort({ciudad:1}).limit(4);
Eso sí, la final no se te olvide recorrer el cursor para mostrar el contenido del mismo:
while (cursor.hasNext()){
printjson(cursor.next());
}
Ya sabemos como realizar ordenaciones en MongoDB.