Docs Menu
Docs Home
/ /

Retrieve Data

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.

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.

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.

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")));
std::cout << bsoncxx::to_json(*result) << 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.

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({})

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

batch_size

The number of documents to return per batch.
Type: std::int32_t

collation

The collation to use for the operation.
Type: bsoncxx::document::view_or_value

comment

The comment to attach to the operation.
Type: bsoncxx::string::view_or_value

cursor_type

The type of cursor to use for the operation.
Type: cursor::type

limit

The maximum number of documents the operation can return.
Type: std::int64_t

skip

The number of documents to skip before returning results.
Type: std::int64_t

sort

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.

Para más información sobre los filtros de query, consultar Especificar una query.

Para obtener ejemplos de código ejecutables sobre cómo recuperar documentos con el controlador C++, consulte Leer datos.

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

  • find()

  • find_one()

  • limit()

Volver

Leer datos

En esta página