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
/ /

Bases de datos y colecciones

En esta guía, aprenderás a utilizar el driver C++ para interactuar con bases de datos y colecciones de MongoDB.

MongoDB organiza los datos en una jerarquía de los siguientes niveles:

  • Bases de datos: Estructuras de datos de nivel superior en una implementación de MongoDB que almacenan colecciones.

  • Colecciones: Grupos de documentos de MongoDB. Son análogos a las tablas en bases de datos relacionales.

  • Documentos: Unidades que almacenan datos literales como cadenas, números, fechas y otros documentos incrustados. Para obtener más información sobre los tipos y la estructura de los campos de documentos, consulta el Documentos guía en el manual de MongoDB Server.

Puedes acceder a una base de datos llamando a la database() función en un objeto mongocxx::client y pasando el nombre de la base de datos como argumento.

El siguiente ejemplo accede a una base de datos llamada test_database:

auto db = client.database("test_database");

Como alternativa, puedes utilizar el operador [] en un mongocxx::client como una abreviatura para la función database(), como se muestra en el siguiente código:

auto db = client["test_database"];

Puede acceder a una colección llamando a la función collection() en un objeto mongocxx::database y pasando el nombre de la colección como argumento.

El siguiente ejemplo accede a una colección llamada test_collection:

auto coll = database.collection("test_collection");

Como alternativa, puedes utilizar el operador [] en un mongocxx::database como una abreviatura para la función collection(), como se muestra en el siguiente código:

auto coll = database["test_collection"];

Tip

Si el nombre de la colección proporcionado aún no existe en la base de datos, MongoDB crea implícitamente la colección cuando se insertan datos en ella por primera vez.

Puedes usar la función create_collection() para crear explícitamente una colección en una base de datos MongoDB.

El siguiente ejemplo crea una colección llamada example_collection:

auto coll = database.create_collection("example_collection");

Puedes especificar opciones de colección, como el tamaño máximo y las reglas de validación de documentos, pasándolas dentro de un documento BSON como segundo parámetro a la función create_collection(). Para obtener una lista completa de los parámetros opcionales, consulte la documentación del comando create en el manual del servidor MongoDB.

Puede recuperar una lista de colecciones en una base de datos llamando a la función list_collections(). Esta función devuelve un cursor que contiene todas las colecciones de la base de datos y sus metadatos asociados.

El siguiente ejemplo llama a la list_collections() función y recorre el cursor para imprimir los resultados:

auto cursor = database.list_collections();
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

Para consultar solo los nombres de las colecciones de la base de datos, llama a la función list_collection_names() como se muestra en el siguiente ejemplo:

auto list = database.list_collection_names();
for(auto&& name : list) {
std::cout << name << std::endl;
}
test_collection
example_collection

Para obtener más información sobre cómo iterar sobre un cursor, consulte la Guíade acceso a datos desde un cursor.

Puedes borrar una colección de la base de datos usando la función drop().

El siguiente ejemplo elimina la colección test_collection:

auto coll = database["test_collection"];
coll.drop();

Advertencia

Eliminar una colección borra todos los datos de la colección

Borrar una colección de la base de datos borra permanentemente todos los documentos y todos los índices dentro de esa colección.

Descartar una colección solo si los datos que contiene ya no son necesarios.

Puede eliminar una base de datos de su clúster utilizando la función drop().

El siguiente ejemplo borra la base de datos test_database:

auto db = client["test_database"];
db.drop();

Advertencia

Borrar una base de datos borra todos los datos de la base de datos.

Borrar una base de datos borra permanentemente todas las colecciones, documentos e índices dentro de esa base de datos.

Descarta una base de datos solo si los datos que contiene ya no son necesarios.

Puedes controlar cómo el driver direcciona las operaciones de lectura configurando una preferencia de lectura. También puede controlar las opciones de cómo el driver espera la confirmación de las operaciones de lectura y escritura en un set de réplicas configurando un nivel de consistencia de lectura y un nivel de confirmación de escritura (write concern).

Por defecto, las bases de datos heredan estas configuraciones del objeto mongocxx::client y las colecciones las heredan de la base de datos. Sin embargo, puedes cambiar estos ajustes utilizando una de las siguientes funciones en tu base de datos o colección:

  • read_preference()

  • read_concern()

  • write_concern()

Para aprender más sobre la configuración de lectura y escritura, consulta las siguientes guías en el manual del MongoDB Server:

Este ejemplo muestra cómo configurar los ajustes de lectura para su base de datos mediante las siguientes funciones:

  • read_preference()Establece la preferencia de lectura en k_secondary

  • read_concern(): Establece el nivel de consistencia de lectura en k_majority

auto db = client["test_database"];
mongocxx::read_preference rp;
mongocxx::read_concern rc;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
db.read_preference(rp);
db.read_concern(rc);

Tip

Para ver una descripción de cada preferencia de lectura y opción de nivel de lectura, consulte la siguiente documentación de la API:

Este ejemplo muestra cómo especificar la preocupación por la lectura y el nivel de confirmación de escritura (write concern) de tu colección mediante el uso de las siguientes funciones:

  • read_concern(): Establece el nivel de consistencia de lectura en k_local

  • write_concern(): Configura el nivel de confirmación de escritura (write concern) en k_acknowledged

auto coll = client["test_database"]["test_collection"];
mongocxx::read_concern rc;
mongocxx::write_concern wc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
coll.read_concern(rc);
coll.write_concern(wc);

Tip

Para ver una descripción de cada nivel de preocupación de lectura y escritura, consulte la siguiente documentación de API:

En el MongoDB Server, puedes aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según los criterios que elijas. Luego, puede usar esas etiquetas para dirigir una operación de lectura a uno o más nodos.

Por defecto, el driver de C++ ignora las etiquetas al elegir el nodo desde el cual leer. Para indicar al controlador de C++ que prefiera ciertas etiquetas, crea un objeto mongocxx::read_preference y llama a su función de nodo tags(). Pasa tus etiquetas preferidas como argumento de arreglo a tags().

En el siguiente ejemplo de código, el conjunto de etiquetas pasado a la función tags() instruye al driver de C++ para que prefiera las lecturas desde el centro de datos de Nueva York ("dc": "ny") y que, en caso de no estar disponible, recurra al centro de datos de San Francisco ("dc": "sf"):

auto tag_set_ny = make_document(kvp("dc", "ny"));
auto tag_set_sf = make_document(kvp("dc", "sf"));
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rp.tags(make_array(tag_set_ny, tag_set_sf).view());

Si varios miembros del conjunto de réplicas coinciden con la preferencia de lectura y los conjuntos de etiquetas que especifique, el controlador de C++ lee desde los miembros del conjunto de réplicas más cercanos, elegidos de acuerdo con su tiempo de ping.

Por driver, el driver utiliza únicamente aquellos nodos cuyos tiempos de ping están dentro de 15 milisegundos del nodo más cercano para las queries. Para distribuir las lecturas entre nodos con mayores latencias, incluya el parámetro localThresholdMS en su URI de cadena de conexión.

El siguiente ejemplo se conecta a una implementación de MongoDB que se ejecuta en localhost:27017 y especifica un umbral local de 35 milisegundos:

mongocxx::uri uri{"mongodb://localhost:27017/?localThresholdMS=35"};
mongocxx::client client{uri};

En el ejemplo anterior, el driver de C++ distribuye las lecturas entre los nodos coincidentes dentro de 35 milisegundos del tiempo de ping del nodo más cercano.

Para aprender más sobre alguna de las funciones tratadas en esta guía, consulta la siguiente documentación de la API:

Volver

Incluye y vincula el controlador

En esta página