14 - Cursores y sus métodos en MongoDB

Cada vez que llamamos al método find de una colección el mismo no retorna un objeto de la clase Cursor.

Si no asignamos el valor a una variable en el shell de MongoDB luego se muestran los documentos recuperados y se nos pide que confirmemos cada vez que se muestran 20.

Podemos encadenar la llamada al método find con los métodos de la clase Cursor, por ejemplo si queremos que se muestren todos los libros ordenados por el nombre tenemos que implementar la siguiente lógica:

use base1
db.libros.drop()

db.libros.insertOne(
  {
    _id: 1,  
    titulo: 'El aleph',
    autor: 'Borges',
    editorial: ['Siglo XXI','Planeta'],
    precio: 20,
    cantidad: 50 
  }
)
db.libros.insertOne(
  {
    _id: 2,  
    titulo: 'Martin Fierro',
    autor: 'Jose Hernandez',
    editorial: ['Siglo XXI'],
    precio: 50,
    cantidad: 12
  }
)
db.libros.insertOne(
  {
    _id: 3,  
    titulo: 'Aprenda PHP',
    autor: 'Mario Molina',
    editorial: ['Siglo XXI','Planeta'],
    precio: 50,
    cantidad: 20
  }
)
db.libros.insertOne(
  {
    _id: 4,  
    titulo: 'Java en 10 minutos',
    editorial: ['Siglo XXI'],
    precio: 45,
    cantidad: 1 
  }
)

db.libros.find().sort({titulo:1})

A partir del cursor que retorna el método 'find' llamamos al método 'sort' de la clase Cursor y como condición indicamos por el campo que queremos ordenar (si pasamos un 1 se ordena en forma ascendente y si pasamos un -1 se ordena en forma descendente):

MongoDB Cursor método sort

Otro método de la clase Cursor que nos puede ayudar cuando ejecutamos comandos desde el shell de MongoDB es 'pretty', el mismo tiene por objetivo mostrarnos los datos del cursor en forma más legible:

db.libros.find().pretty()

La salida de los datos del Cursor empleando el método pretty es:

MongoDB Cursor método pretty

El método sort también retorna un Cursor con los datos ordenados, luego podemos llamar al método pretty a partir del Cursor devueto por sort:

db.libros.find().sort({titulo:1}).pretty()

Otro método útil es el 'limit' que tiene por objetivo limitar a un determinado número de documentos a recuperar del Cursor. Por ejemplo tenemos que la llamada al método find retorna 4 documentos, podemos aplicar el método limit a dicho Cursor para que se limite a recuperar los dos primeros:

db.libros.find().limit(2)

MongoDB Cursor método limit

Nuevamente tener en cuenta que primero podemos ordenar los datos del Cursor y llamar a partir de éste al método limit:

db.libros.find().sort({titulo:1}).limit(2)

Otro método llamado 'skip' nos permite saltear una determinada cantidad de documentos desde el principio del cursor, por ejemplo:

db.libros.find().skip(1)

El método find retorna un Cursor con 4 documentos, pero mediante la llamada al método skip indicamos que comience a partir del segundo documento hasta el final:

MongoDB Cursor método skip

Podemos combinar las llamadas al método skip y limit:

db.libros.find().skip(2).limit(2).pretty()

Recuperamos a partir del tercer documento del Cursor la cantidad de 2 documentos y se muestran en una forma legible:

MongoDB Cursor método skip limit pretty

Existen muchos métodos en la clase Cursos que iremos viendo a medida que los necesitemos, podemos consultar todos los métodos en la página oficial de MongoDB.