Overview
En esta guía, aprenderá a usar el controlador de C++ para recuperar datos de una colección de MongoDB mediante operaciones de lectura. Puede llamar al
find() o el método find_one() en una colección para recuperar documentos que coincidan con un conjunto de criterios.
Datos de muestra
Los ejemplos de esta guía utilizan la colección companies en la base de datos sample_training de la 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 las variables db collection y:
auto db = client["sample_training"]; auto collection = db["companies"];
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.
Buscar documentos
El controlador de C++ incluye dos métodos para recuperar documentos de una colección: find_one() find()y. Estos métodos utilizan un filtro de consulta y devuelven uno o más documentos coincidentes. Un filtro de consulta es un objeto que especifica los documentos que desea recuperar en su consulta.
Tip
Para obtener más información sobre los filtros de consulta, consulte Especifique una consulta.
Encuentre un documento
Para encontrar un solo documento en una colección, llame al método find_one() y pase un filtro de consulta que especifique los criterios del documento que desea encontrar.
El método find_one() devuelve una instancia de std::optional< bsoncxx::document::value >. Si el filtro de query coincide con un documento, el objeto optional contiene un valor de tipo bsoncxx::document::value. Si el filtro de query no coincide con ningún documento, el objeto optional no contiene ningún valor.
Si el filtro de consulta coincide con más de un documento, el find_one() método devuelve el primer documento coincidente de los resultados recuperados.
Tip
El método find_one() es útil cuando sabes que solo hay un documento coincidente o si solo te interesa la primera coincidencia.
El siguiente ejemplo utiliza el método find_one() para encontrar el primer documento en el que el campo name tiene el valor "LinkedIn":
auto result = collection.find_one(make_document(kvp("name", "LinkedIn"))); if (result) { std::cout << bsoncxx::to_json(*result) << std::endl; } else { std::cout << "No result found" << std::endl; }
{ "_id" : { "$oid" : "52cdef7c4bab8bd675297e0c" }, "name" : "LinkedIn", "permalink" : "linkedin", "crunchbase_url" : "http://www.crunchbase.com/company/linkedin", "homepage_url" : "http://linkedin.com", ...
Tip
Orden de clasificación
El método find_one() devuelve el primer documento en orden natural en el disco si no se especifica ningún criterio de ordenación.
Para obtener más información sobre la clasificación, consulte la sección Ordenar de la guía Especificar documentos a devolver.
Encuentra varios documentos
Para encontrar varios documentos en una colección, pasar un filtro de query al método find() que especifique los criterios de los documentos que desea recuperar.
El siguiente ejemplo utiliza el método find() para encontrar todos los documentos en los que el campo founded_year tiene el valor 1970:
auto cursor = collection.find(make_document(kvp("founded_year", 1970)));
El método find() devuelve una instancia de mongocxx::cursor, que se puede iterar para ver los documentos coincidentes. Un cursor es un mecanismo que permite a una aplicación iterar sobre los resultados de la base de datos, manteniendo solo un subconjunto de ellos en memoria en un momento dado. Los cursores son útiles cuando el método find() devuelve una gran cantidad de documentos.
Puede iterar sobre los documentos en un cursor utilizando un bucle for basado en rango, como se muestra en el siguiente ejemplo:
auto cursor = collection.find(make_document(kvp("founded_year", 1970))); for(auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "_id" : { "$oid" : "52cdef7d4bab8bd675298be4" }, "name" : "Mitsubishi Motors", "permalink" : "mitsubishi-motors", "crunchbase_url" : "http://www.crunchbase.com/company/mitsubishi-motors", ... { "_id" : { "$oid" : "52cdef7e4bab8bd67529b996" }, "name" : "Western Digital", "permalink" : "western-digital", "crunchbase_url" : "http://www.crunchbase.com/company/western-digital", ... { "_id" : { "$oid" : "52cdef7e4bab8bd67529b9f1" }, "name" : "Celarayn", "permalink" : "celarayn", "crunchbase_url" : "http://www.crunchbase.com/company/celarayn", ...
Nota
Encuentre todos los documentos
Para encontrar todos los documentos en una colección, pasa un filtro vacío al método find():
auto cursor = collection.find({})
Modificar el comportamiento de búsqueda
Puedes modificar el comportamiento de los métodos find() y find_one() pasando una instancia de la clase mongocxx::options::find como parámetro. La siguiente tabla describe algunos de los campos que puedes establecer en una instancia de mongocxx::options::find:
Campo | Descripción |
|---|---|
| The number of documents to return per batch. Type: std::int32_t |
| The collation to use for the operation. Type: bsoncxx::document::view_or_value |
| The comment to attach to the operation. Type: bsoncxx::string::view_or_value |
| The type of cursor to use for the operation. Type: cursor::type |
| The maximum number of documents the operation can return. Type: std::int64_t |
| The number of documents to skip before returning results. Type: std::int64_t |
| The order in which the operation returns matching documents. Type: bsoncxx::document::view_or_value |
El siguiente ejemplo utiliza el método find() para encontrar todos los documentos en los que el campo number_of_employees tiene el valor 1000 e indica a la operación que devuelva un máximo de 5 resultados:
mongocxx::options::find opts; opts.limit(5); auto cursor = collection.find(make_document(kvp("number_of_employees", 1000)), opts);
Para obtener una lista completa de los mongocxx::options::find campos de objeto, consulte la documentación de la API.
Información Adicional
Para más información sobre los filtros de query, consultar Especificar una query.
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: