Overview
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 a devolver de una consulta.
mongocxx::options::find::sort(): especifica el orden de clasificación de los documentos devueltos.
mongocxx::options::find::skip(): especifica la cantidad de documentos que se deben omitir antes de devolver los resultados de la consulta.
Datos de muestra
Los ejemplos de esta guía utilizan el restaurants Colección en la sample_restaurants base de datos de los conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación C++, cree una mongocxx::client instancia de que se conecte a un clúster de Atlas y asigne los siguientes valores a db las collection variables y:
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 muestra, consulte la guía de introducción a MongoDB.
Limit
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 devolver los documentos en un orden específico.
Sort
Para devolver documentos en un orden específico, cree un documento que incluya el campo por el que se ordenarán los resultados y la dirección de ordenación. Un valor de 1 ordena los valores de menor a mayor, y un valor de -1 los ordena de mayor a menor. A continuación, llame al método mongocxx::options::find::sort() en una instancia mongocxx::options::find y pase este documento como argumento.
El siguiente ejemplo devuelve todos los documentos que tienen un valor cuisine de "Italian", ordenados en orden ascendente de name valores de campo:
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" }
Omitir
Para omitir un número específico de documentos antes de devolver los resultados de la consulta, cree una instancia de la clase mongocxx::options::find y configure su campo skip. A continuación, pase la 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" } ...
Combinar límite, ordenar y omitir
Puede configurar los campos limit, sort y skip de una sola instancia mongocxx::options::find. Esto le permite establecer un número máximo de documentos ordenados para devolver, omitiendo un número específico de documentos antes de devolverlos.
El siguiente ejemplo devuelve 5 documentos con un valor cuisine de "Italian". Los resultados se ordenan ascendentemente 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 que se llaman estos métodos no modifica los documentos devueltos. El controlador reordena automáticamente las llamadas para realizar primero la operación de ordenación, después la de omisión y, finalmente, la de límite.
Información Adicional
Para obtener más información sobre cómo recuperar documentos, consulte la Guíade recuperación de datos.
Para obtener más información sobre cómo especificar una consulta, consulte la guía Especificar una consulta.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: