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:

  • mongocxx::options::find::limit(): Especifica el número máximo de documentos que se devolverán de una query.

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

  • mongocxx::options::find::skip(): Especifica el número de documentos que se debe omitir antes de devolver los resultados de la query.

Los ejemplos de esta guía utilizan el restaurants colección en la base de datos sample_restaurants de los Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación C++, instancia un mongocxx::client que se conecte a un clúster de Atlas y asigna los siguientes valores a tus variables db y collection:

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.

Para especificar el número máximo de documentos devueltos en una operación de lectura, cree una instancia de la clase mongocxx::options::find y establezca su campo limit. Luego, pasa tu instancia de mongocxx::options::find como argumento al método find().

El siguiente ejemplo encuentra todos los restaurantes que tienen un valor de campo cuisine de "Italian" y limita los resultados a 5 documentos:

mongocxx::options::find opts{};
opts.limit(5);
auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts);
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "..." }, ..., "name" : "Philadelphia Grille Express", "restaurant_id" : "40364305" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Isle Of Capri Restaurant", "restaurant_id" : "40364373" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Marchis Restaurant", "restaurant_id" : "40364668" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Crystal Room", "restaurant_id" : "40365013" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Forlinis Restaurant", "restaurant_id" : "40365098" }

Tip

El ejemplo anterior devuelve los primeros cinco documentos que coinciden con la consulta según su orden natural en la base de datos. La siguiente sección describe cómo retornar los documentos en un orden especificado.

Para devolver documentos en un orden especificado, cree un documento que incluya el campo por el cual ordenar los resultados y la dirección de orden. Un valor de 1 ordena los valores de menor a mayor, y un valor de -1 los ordena de mayor a menor. Luego, llama al método mongocxx::options::find::sort() en una instancia de mongocxx::options::find y pasar este documento como argumento.

El siguiente ejemplo devuelve todos los documentos que tienen un valor de cuisine igual a "Italian", ordenados en orden ascendente según los valores del campo name:

mongocxx::options::find opts{};
opts.sort(make_document(kvp("name", 1)));
auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts);
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "..." }, ..., "name" : "(Lewis Drug Store) Locanda Vini E Olii", "restaurant_id" : "40804423" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "101 Restaurant And Bar", "restaurant_id" : "40560108" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "44 Sw Ristorante & Bar", "restaurant_id" : "40698807" }
...
{ "_id" : { "$oid" : "..." }, ..., "name" : "Zucchero E Pomodori", "restaurant_id" : "41189590" }

Para omitir un número especificado de documentos antes de devolver los resultados de la consulta, crea una instancia de la clase mongocxx::options::find y define su campo skip. Luego, pasa tu instancia mongocxx::options::find como argumento al método find().

El siguiente ejemplo devuelve todos los documentos que tienen un valor de campo borough de "Manhattan" y omite los primeros 10 documentos:

mongocxx::options::find opts{};
opts.skip(10);
auto cursor = collection.find(make_document(kvp("borough", "Manhattan")), opts);
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "..." }, ..., "name" : "Cafe Metro", "restaurant_id" : "40363298" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Lexler Deli", "restaurant_id" : "40363426" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Domino'S Pizza", "restaurant_id" : "40363644" }
...

Puedes configurar los campos limit, sort y skip de una sola instancia de mongocxx::options::find. 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 5 documentos que tienen un valor de cuisine igual a "Italian". Los resultados están clasificados en orden ascendente por el valor del campo name, omitiendo los primeros 10 documentos:

mongocxx::options::find opts{};
opts.sort(make_document(kvp("name", 1))).limit(5).skip(10);
auto cursor = collection.find(make_document(kvp("cuisine", "Italian")), opts);
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acqua", "restaurant_id" : "40871070" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Restaurant", "restaurant_id" : "41591488" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acqua Santa", "restaurant_id" : "40735858" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acquista Trattoria", "restaurant_id" : "40813992" }
{ "_id" : { "$oid" : "..." }, ..., "name" : "Acquolina Catering", "restaurant_id" : "41381423" }

Nota

El orden en el que se llaman estos métodos no cambia los documentos que se devuelven. El controlador reorganiza automáticamente las llamadas para realizar primero la operación de ordenación, luego la operación de omisión y, por último, la operación de límite.

Para obtener más información sobre la recuperación de documentos, consulte la Retrieve Data guide.

Para más información sobre cómo especificar una query, consulta la guía de Especificar una query.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifica un query

En esta página