Overview
En esta guía, puede aprender a utilizar una cadena de conexión y una mongoc_client_t objeto para conectarse a diferentes tipos de implementaciones de MongoDB.
Atlas
Para conectarse a una implementación de MongoDB en Atlas, incluya los siguientes elementos en su cadena de conexión:
La URL de su clúster Atlas
Su nombre de usuario de MongoDB
Su contraseña de MongoDB
Luego, pase su cadena de conexión a la función mongoc_client_new().
Tip
Sigue el Guía de conexión del controlador Atlas para recuperar su cadena de conexión.
El siguiente código muestra cómo usar el controlador C para conectarse a un clúster Atlas. También utiliza la función mongoc_server_api_new() para especificar una versión estable de la API.
bson_t *ping = BCON_NEW("ping", BCON_INT32(1)); bson_t reply = BSON_INITIALIZER; bson_error_t error; mongoc_client_t *client = NULL; // Create a new client client = mongoc_client_new("mongodb+srv://<db_username>:<db_password>@<hostname:port>/?<options>"); // Set the version of the Stable API on the client mongoc_server_api_t *api = mongoc_server_api_new(MONGOC_SERVER_API_V1); if (!mongoc_client_set_server_api(client, api, &error)) { fprintf(stderr, "error: %s\n", error.message); goto cleanup; } // Send a ping to confirm a successful connection if (!mongoc_client_command_simple(client, "admin", ping, NULL, &reply, &error)) { fprintf(stderr, "error: %s\n", error.message); goto cleanup; } printf("Pinged your deployment. You successfully connected to MongoDB!\n"); cleanup: bson_destroy(&reply); bson_destroy(ping); mongoc_server_api_destroy(api); mongoc_client_destroy(client);
Tip
Al conectarse a Atlas, recomendamos usar la opción de cliente API estable para evitar cambios importantes cuando Atlas se actualice a una nueva versión de MongoDB Server. Para obtener más información sobre la API estable, consulte Guíade API estable.
Implementaciones locales
Para conectarse a una implementación local de MongoDB, use localhost como nombre de host. De forma predeterminada, el proceso mongod se ejecuta en el puerto 27017, aunque puede personalizarlo para su implementación.
El siguiente código muestra cómo usar el controlador C para conectarse a una implementación local de MongoDB:
bson_t *ping = BCON_NEW("ping", BCON_INT32(1)); bson_t reply = BSON_INITIALIZER; bson_error_t error; mongoc_client_t *client = NULL; // Create a new client mongoc_uri_t *uri = mongoc_uri_new_with_error("mongodb://localhost:27017", &error); if (!uri) { fprintf(stderr, "failed to parse URI, error: %s\n", error.message); goto cleanup; } client = mongoc_client_new_from_uri(uri); if (!client) { goto cleanup; } // Send a ping to confirm a successful connection if (!mongoc_client_command_simple(client, "admin", ping, NULL, &reply, &error)) { fprintf(stderr, "error: %s\n", error.message); goto cleanup; } printf("Pinged your deployment. You successfully connected to MongoDB!\n"); cleanup: bson_destroy(&reply); bson_destroy(ping); mongoc_client_destroy(client); mongoc_uri_destroy(uri);
Sets de réplicas
Para conectarse a un conjunto de réplicas, especifique los nombres de host (o direcciones IP) y los números de puerto de los miembros del conjunto de réplicas.
En lugar de proporcionar una lista completa de hosts en el conjunto de réplicas, puede especificar uno o más de ellos e indicar al controlador C que realice la detección automática para encontrar los demás. Para ello, realice una de las siguientes acciones:
Especifique el nombre del conjunto de réplicas como el valor del parámetro
replicaSet.Especifique
falsecomo el valor del parámetrodirectConnection.Especifica más de un host en el conjunto de réplicas.
El siguiente ejemplo utiliza un URI de conexión de muestra para conectarse al conjunto de réplicas de MongoDB myreplset, que se ejecuta en el puerto 27017 de tres hosts diferentes:
bson_t *ping = BCON_NEW("ping", BCON_INT32(1)); bson_t reply = BSON_INITIALIZER; bson_error_t error; mongoc_client_t *client = NULL; // Create a new client client = mongoc_client_new("mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset"); if (!client) { goto cleanup; } // Send a ping to confirm a successful connection if (!mongoc_client_command_simple(client, "admin", ping, NULL, &reply, &error)) { fprintf(stderr, "error: %s\n", error.message); goto cleanup; } printf("Pinged your deployment. You successfully connected to MongoDB!\n"); cleanup: bson_destroy(&reply); bson_destroy(ping); mongoc_client_destroy(client);
La mongoc_client_new() función no es bloqueante. Al conectarse a un conjunto de réplicas, el constructor retorna inmediatamente mientras el cliente usa subprocesos en segundo plano para conectarse al conjunto de réplicas.
Si construye un objeto mongoc_client_t e inmediatamente imprime la representación de cadena de su atributo nodes, la lista podría estar vacía mientras el cliente se conecta a los miembros del conjunto de réplicas.
Nota
Set de réplicas en Docker
Cuando un set de réplicas se ejecuta en Docker, se podría exponer solo un punto final de MongoDB. En este caso, el set de réplicas no se puede detectar. Si se especifica directConnection=false en la URI de conexión, o se deja esta opción sin configurar, puedes evitar que tu aplicación se conecte a ella.
En un entorno de prueba o desarrollo, se puede conectar al set de réplicas especificando directConnection=true. En un entorno de producción, se recomienda configurar el clúster para que cada instancia de MongoDB sea accesible fuera de la red virtual de Docker.
Detección de servicios DNS
Para usar la detección de servicios DNS y buscar el registro SRV DNS del servicio al que se conecta, especifique el formato de conexión SRV en la cadena de conexión. Al especificar el formato de conexión SRV, el controlador C vuelve a escanear automáticamente en busca de nuevos hosts. No es necesario cambiar la configuración del cliente para habilitar este comportamiento.
El siguiente código crea un nuevo mongoc_client_t utilizando una cadena de conexión que utiliza el formato de conexión SRV:
mongoc_client_t *client = mongoc_client_new("mongodb+srv://<hostname>");
Documentación de la API
Para obtener más información sobre los objetos y funciones mencionados en esta guía, consulte la siguiente documentación de API: