Docs Menu
Docs Home
/ /

Bases de datos y colecciones

En esta guía, puede aprender a interactuar con bases de datos y colecciones de MongoDB mediante el controlador C.

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 documento, consulte Guía dedocumentos en el manual de MongoDB Server.

Acceda a una base de datos mediante el mongoc_client_get_database() función.

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

mongoc_database_t *database = mongoc_client_get_database(client, "test_database");

Acceda a una colección utilizando las funciones mongoc_client_get_collection() o mongoc_database_get_collection().

El siguiente ejemplo accede a una colección llamada test_collection utilizando la función mongoc_database_get_collection():

mongoc_collection_t *collection = mongoc_database_get_collection(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.

Utilice la función mongoc_database_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:

mongoc_collection_t *new_collection = mongoc_database_create_collection(database, "example_collection", NULL, &error);

Puede especificar opciones de colección, como el tamaño máximo y las reglas de validación de documentos, pasándolas dentro de una bson_t estructura como tercer parámetro de la mongoc_database_create_collection() función. Para obtener una lista completa de parámetros opcionales, consulte la documentación del comando create en el manual de MongoDB Server.

Puede consultar una lista de colecciones en una base de datos llamando a la función mongoc_database_find_collections_with_opts(). 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 función mongoc_database_find_collections_with_opts() e itera sobre el cursor para imprimir los resultados:

mongoc_cursor_t *cursor = mongoc_database_find_collections_with_opts(database, NULL);
const bson_t *doc;
while (mongoc_cursor_next(cursor, &doc))
{
char *str = bson_as_canonical_extended_json(doc, NULL);
printf("Collection: %s\n", str);
bson_free(str);
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

Para consultar solo los nombres de las colecciones en la base de datos, llame a la función mongoc_database_get_collection_names_with_opts() de la siguiente manera:

char **strv;
unsigned i;
if ((strv = mongoc_database_get_collection_names_with_opts(database, NULL, &error)))
{
for (i = 0; strv[i]; i++)
printf("%s\n", strv[i]);
bson_strfreev(strv);
}
else
{
fprintf(stderr, "Command failed: %s\n", error.message);
}
test_collection
example_collection

Para obtener más información sobre cómo iterar sobre un cursor, consulte Acceder a datos desde un cursor.

Puede eliminar una colección de la base de datos utilizando la función mongoc_collection_drop().

El siguiente ejemplo elimina la colección test_collection:

mongoc_collection_t *collection = mongoc_database_get_collection(database, "test_collection");
mongoc_collection_drop(collection, NULL);

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 mongoc_database_drop().

El siguiente ejemplo borra la base de datos test_database:

mongoc_database_t *database = mongoc_client_get_database(client, "test_database");
mongoc_database_drop(database, NULL);

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.

Puede controlar cómo el controlador enruta las operaciones de lectura configurando una preferencia de lectura. También puede controlar cómo el controlador espera la confirmación de las operaciones de lectura y escritura en un conjunto de réplicas configurando una preocupación de lectura y una preocupación de escritura.

De forma predeterminada, las bases de datos heredan esta configuración de la instancia mongoc_client_t y las colecciones la heredan de la base de datos. Sin embargo, puede cambiar esta configuración en su base de datos mediante una de las siguientes funciones:

  • mongoc_database_set_read_prefs()

  • mongoc_database_set_read_concern()

  • mongoc_database_set_write_concern()

El siguiente ejemplo muestra cómo cambiar la preferencia de lectura de una base de datos utilizando la función mongoc_database_set_read_prefs():

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_PRIMARY_PREFERRED);
mongoc_database_set_read_prefs(database, read_prefs);

Puede cambiar la configuración de lectura y escritura en sus colecciones utilizando una de las siguientes funciones:

  • mongoc_collection_set_read_prefs()

  • mongoc_collection_set_read_concern()

  • mongoc_collection_set_write_concern()

El siguiente ejemplo muestra cómo cambiar la preferencia de lectura de una colección utilizando la función mongoc_collection_set_read_prefs():

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_PRIMARY_PREFERRED);
mongoc_collection_set_read_prefs(collection, read_prefs);

Tip

Para ver los tipos de preferencias de lectura disponibles, consulte la documentación de la API.

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

Para obtener más información sobre las opciones que puede configurar para configurar el comportamiento de selección de servidor, consulte Opciones de selección y descubrimiento de servidor en el manual de MongoDB Server.

En MongoDB Server, puede aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según el criterio que elija. Después, puede usar esas etiquetas para seleccionar uno o más miembros para una operación de lectura.

De forma predeterminada, el controlador C ignora las etiquetas al elegir un miembro para leer. Para indicarle que prefiera ciertas etiquetas, use la función mongoc_read_prefs_set_tags() para establecerlas en una instancia de mongoc_read_prefs_t.

En el siguiente ejemplo de código, el conjunto de etiquetas pasado a la función mongoc_read_prefs_set_tags() le indica al controlador C que prefiera las lecturas del centro de datos de Nueva York ('dc': 'ny') y recurra al centro de datos de San Francisco ('dc': 'sf'):

mongoc_read_prefs_t *read_prefs = mongoc_read_prefs_new(MONGOC_READ_SECONDARY_PREFERRED);
bson_t *tags = BCON_NEW("DC", BCON_UTF8("ny"), "DC", BCON_UTF8("sf"));

Si varios servidores coinciden con las preferencias de lectura y los conjuntos de etiquetas que especifique, el controlador C lee desde los servidores más cercanos, elegidos según su tiempo de ping.

De forma predeterminada, el controlador utiliza solo los miembros cuyos tiempos de ping están a menos de 15 milisegundos del miembro más cercano para las consultas. Para distribuir las lecturas entre miembros con latencias más altas, incluya el parámetro localThresholdMS en la URI de la 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:

const char *uri_string = "mongodb://localhost:27017/?localThresholdMS=35";
mongoc_client_t *client = mongoc_client_new(uri_string);

En el ejemplo anterior, el controlador C distribuye lecturas entre los miembros coincidentes dentro de 35 milisegundos del tiempo de ping del miembro 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

Elija un destino de conexión

En esta página