Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Especifica los documentos a devolver

En esta guía, puedes aprender a especificar qué documentos devolver de una operación de lectura utilizando los siguientes métodos:

  • sort(): Especifica el orden de clasificación de los documentos devueltos.

  • limit()Especifica el número máximo de documentos que se deben devolver como resultado de una query.

  • skip(): Especifica la cantidad de documentos que se deben omitir antes de devolver los resultados de la consulta.

Para ejecutar los ejemplos de esta guía, utiliza el siguiente snippet de código para insertar documentos que describen libros en la colección myDB.books:

const myDB = client.db("myDB");
const myColl = myDB.collection("books");
await myColl.insertMany([
{ "_id": 1, "name": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 },
{ "_id": 2, "name": "Les Misérables", "author": "Hugo", "length": 1462 },
{ "_id": 3, "name": "Atlas Shrugged", "author": "Rand", "length": 1088 },
{ "_id": 4, "name": "Infinite Jest", "author": "Wallace", "length": 1104 },
{ "_id": 5, "name": "Cryptonomicon", "author": "Stephenson", "length": 918 },
{ "_id": 6, "name": "A Dance With Dragons", "author": "Martin", "length": 1104 },
]);

Nota

Se debe encadenar un método de cursor como sort(), limit(), skip() o project() a una operación de lectura antes de iterar el cursor. Si se especifica un método de cursor después de iterar el cursor, la configuración no se aplica a la operación de lectura.

Nota

Tu operación de consulta puede devolver una referencia a un cursor que contenga documentos coincidentes. Para aprender a examinar los datos almacenados en el cursor, consulta el Acceder a los datos desde una página de cursor.

Utilice el método sort() para cambiar el orden en que las operaciones de lectura devuelven los documentos. Este método indica a MongoDB que ordene los documentos devueltos según los valores de uno o más campos en una dirección determinada. Para ordenar los documentos devueltos por un campo en orden ascendente (de menor a mayor), utilice el valor 1. Para ordenar en orden descendente (de mayor a menor), utilice -1. Si no especifica un orden, MongoDB no garantiza el orden de los resultados de la consulta.

El siguiente ejemplo pasa el documento de ordenación a una operación de lectura para garantizar que la operación devuelva primero los libros más largos y luego los libros más cortos:

// define an empty query document
const query = {};
// sort in descending (-1) order by length
const sortFields = { length: -1 };
const cursor = myColl.find(query).sort(sortFields);
for await (const doc of cursor) {
console.dir(doc);
}

En este caso, el número -1 indica a la operación de lectura que ordene los libros en orden descendente por longitud. find() devuelve los siguientes documentos cuando se utiliza esta clasificación con una consulta vacía:

{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }
{ "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 }
{ "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 }
{ "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 }
{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }

A veces, el orden de dos o más documentos es ambiguo usando un orden de clasificación especificado. En el ejemplo anterior, los documentos que tienen title valores de "A Dance with Dragons" y "Infinite Jest" ambos tienen un length de 1104, por lo que no se garantiza el orden en que se devuelven. Para resolver empates en sus resultados ordenados de manera repetible, agregue más campos al documento de ordenamiento:

// define an empty query document
const query = {};
// sort in ascending (1) order by length
const sortFields = { length: 1, author: 1 };
const cursor = myColl.find(query).sort(sortFields);
for await (const doc of cursor) {
console.dir(doc);
}

Con la adición del campo author al documento de ordenación, la operación de lectura ordena los documentos coincidentes primero por length y, si hay empate, por author. Los campos de documentos coincidentes se comparan en el mismo orden en que se especifican los campos en el documento de ordenación. find() devuelve el siguiente orden de documentos cuando se utiliza este tipo de ordenación en los documentos que coinciden con la query:

{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }
{ "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 }
{ "_id": 3, "title": "Atlas Shrugged", "author": "Rand", "length": 1088 }
{ "_id": 6, "title": "A Dance with Dragons", "author": "Martin", "length": 1104 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }
{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }

Utiliza el método limit() para limitar el número de documentos que se pueden devolver de una operación de lectura. Este método especifica el número máximo de documentos que la operación puede devolver, pero la operación puede devolver un número menor de documentos si no hay suficientes documentos presentes para alcanzar el límite. Si se usa limit() con el skip() metodo, se omite la aplicación primero y el límite solo se aplica a los documentos restantes después de la omisión.

Este ejemplo realiza las siguientes acciones:

  • Utiliza un filtro de consulta vacío para hacer coincidir todos los documentos de la colección

  • Llama al método sort() para aplicar una ordenación descendente en el campo length a los resultados

  • Llama al método limit() para devolver solo los primeros 3 resultados

// define an empty query document
const query = {};
// sort in descending (-1) order by length
const sortFields = { length: -1 };
const limitNum = 3;
const cursor = myColl.find(query).sort(sortFields).limit(limitNum);
for await (const doc of cursor) {
console.dir(doc);
}

El ejemplo de código anterior genera los siguientes tres documentos, ordenados por longitud:

{ "_id": 2, "title": "Les Misérables", "author": "Hugo", "length": 1462 }
{ "_id": 6, "title": "A Dance With Dragons", "author": "Martin", "length": 1104 }
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }

Nota

El orden en el que llames a limit() y sort() no importa porque el controlador reordena las llamadas para aplicar primero la ordenación. Las dos siguientes llamadas son equivalentes:

myColl.find(query).sort({ length: -1 }).limit(3);
myColl.find(query).limit(3).sort({ length: -1 });

Utilice el método skip() para omitir documentos desde el principio de los resultados de la operación de lectura. Puedes combinar skip() con sort() para omitir los resultados superiores (para orden descendente) o inferiores (para orden ascendente) para una query determinada. Dado que el orden de los documentos devueltos no está garantizado en ausencia de un ordenamiento, usar skip() sin usar sort() omite documentos arbitrarios.

Si el valor de skip() sobrepasa el número de documentos coincidentes de una query, entonces esa query no devuelve documentos.

Este ejemplo consulta la colección en busca de los libros con la quinta y sexta mayor longitud, realizando las siguientes acciones:

  • Utiliza un filtro de consulta vacío para hacer coincidir todos los documentos de la colección

  • Llama al método sort() para aplicar una ordenación descendente en el campo length, lo que hace que se devuelvan los libros más largos antes que los más cortos

  • Llama al método skip() para omitir los primeros cuatro documentos coincidentes del resultado.

// define an empty query document
const query = {};
const sortFields = { length: -1 };
const skipNum = 4;
const cursor = myColl.find(query).sort(sortFields).skip(skipNum);
for await (const doc of cursor) {
console.dir(doc);
}

Dado que la query omite los primeros cuatro documentos coincidentes, el snippet de código anterior imprime el quinto y sexto documentos de mayor longitud:

{ "_id": 5, "title": "Cryptonomicon", "author": "Stephenson", "length": 918 }
{ "_id": 1, "title": "The Brothers Karamazov", "author": "Dostoyevsky", "length": 824 }

Puedes combinar las opciones limit, sort y skip en una sola operación. Esto permite establecer un número máximo de documentos ordenados para devolver, omitiendo un número especificado de documentos antes de la devolución.

El siguiente ejemplo devuelve documentos con el valor "1104" de length. Los resultados están ordenados alfabéticamente, omitiendo el primer documento y solo incluyendo el primer resultado:

const query = {length: "1104"};
const cursor = myColl.find(query).sort({ title: 1 }).skip(1).limit(1);
for await (const doc of cursor) {
console.dir(doc);
}
{ "_id": 4, "title": "Infinite Jest", "author": "Wallace", "length": 1104 }

Nota

El orden en que llama a estos métodos no cambia los documentos que se devuelven.

Para obtener más información sobre cómo especificar una consulta, consulte Operaciones de consulta.

Para más información sobre cómo recuperar documentos, visita Buscar documentos.

Para obtener más información sobre cualquiera de los métodos mencionados en esta guía, consulta la siguiente documentación de la API:

Volver

Buscar documentos

En esta página