Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Bases de datos y colecciones

En esta guía, puede aprender a interactuar con bases de datos y colecciones de MongoDB utilizando 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 de campos de documentos y la estructura, consulta la guía Documentos en el manual de MongoDB Server.

Acceda a una base de datos utilizando la función mongoc_client_get_database().

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

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

Accede 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.

Utiliza 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);

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

Puedes query una lista de colecciones en una base de datos llamando a la función mongoc_database_find_collections_with_opts(). La 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 mongoc_database_find_collections_with_opts() función y recorre 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 realizar una query únicamente los nombres de las colecciones en la base de datos, llama 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, consulta Acceder a los datos desde un cursor.

Puedes borrar una colección de la base de datos usando 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.

Puedes borrar una base de datos de tu clúster utilizando la función de 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.

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 esta configuración de la instancia mongoc_client_t y las colecciones la heredan de la base de datos. Sin embargo, puedes cambiar esta configuración en tu base de datos utilizando 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);

Puedes cambiar la configuración de lectura y guardado en tus 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 usando 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, consulta la documentación de la API.

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

Para obtener más información sobre las opciones que puedes configurar para ajustar el comportamiento de selección de servidores, consulta Opciones de selección y descubrimiento de servidores en el manual del servidor MongoDB.

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.

De forma predeterminada, el driver C ignora las etiquetas al elegir un nodo del cual leer. Para indicar al controlador C que prefiera ciertas etiquetas, utiliza la función mongoc_read_prefs_set_tags() para establecer las etiquetas 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() instruye al driver de C para que prefiera lecturas del centro de datos de Nueva York ('dc': 'ny') y que 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"));

Cuando se conecta a un set de réplicas con una preferencia de lectura que no es primaria, el driver lee del miembro elegible más cercano del set de réplicas dentro de la ventana de latencia. Al conectarse a un clúster fragmentado, el controlador selecciona entre todas las instancias mongos accesibles dentro de la ventana de latencia. Para aprender sobre los modos de preferencia de lectura, consulte Preferencia de lectura.

Por defecto, el controlador utiliza únicamente los servidores cuyos tiempos de ping se encuentren dentro de 15 milisegundos del servidor elegible más cercano.

Por ejemplo, supongamos que su set de réplicas tiene cinco nodos y el nodo más cercano tiene un tiempo de ping de 5 milisegundos. Con el valor por defecto de localThresholdMS de 15 milisegundos, solo los nodos con un tiempo de ping de 20 milisegundos o menos están dentro de la ventana de latencia, como se muestra en la tabla siguiente:

host
Tipo
Tiempo de ping
Dentro de la Ventana de Latencia

host1

Primario

5ms

host2

secundario

9ms

host3

secundario

13ms

host4

secundario

24ms

No

host5

secundario

42ms

No

Para ajustar la ventana de latencia, incluye el parámetro localThresholdMS en tu 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:

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

En el ejemplo anterior, el driver C distribuye las lecturas entre 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: