Visão geral
Neste guia, você pode aprender como utilizar uma string de conexão e um objeto do mongoc_client_t
para conectar a diferentes tipos de sistemas MongoDB .
Atlas
Para se conectar a uma MongoDB deployment no Atlas, inclua os seguintes elementos em sua connection string:
O URL do seu Atlas cluster
Seu nome de usuário MongoDB
Sua senha do MongoDB
Em seguida, passe sua string de conexão para a função mongoc_client_new()
.
Dica
Siga oguia de conexão do driver do Atlas para recuperar sua connection string.
O código abaixo mostra como usar o driver C para se conectar a um cluster Atlas . O código também usa a função mongoc_server_api_new()
para especificar uma versão da API estável.
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);
Dica
Ao se conectar ao Atlas, recomendamos usar a opção de cliente Stable API para evitar alterações significativas quando o Atlas atualizar para uma nova versão do MongoDB Server. Para saber mais sobre a API estável, consulte o guia de API estável.
Implantações locais
Para se conectar a uma implantação local do MongoDB, use localhost
como nome do host. Por padrão, o processo mongod
é executado na porta 27017, embora você possa personalizar isso para seu sistema.
O código a seguir mostra como usar o driver C para se conectar a um MongoDB deployment local:
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);
Conjuntos de réplicas
Para se conectar a um conjunto de réplicas, especifique o nome do host (ou endereço IP) e o número de porta dos membros do conjunto de réplicas.
Em vez de fornecer uma lista completa de hosts no conjunto de réplicas, você pode especificar um ou mais hosts no conjunto de réplicas e instruir o driver C a executar a descoberta automática para encontrar os outros. Para instruir o driver a realizar a descoberta automática, execute uma das seguintes ações:
Especifique o nome do conjunto de réplica como o valor do parâmetro
replicaSet
.Especifique
false
como o valor do parâmetrodirectConnection
.Especifique mais de um host no conjunto de réplica.
O exemplo a seguir usa um URI de conexão de exemplo para se conectar ao conjunto de réplicas do MongoDB myreplset
, que está sendo executado na porta 27017
de três 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);
A mongoc_client_new()
função não está bloqueando. Quando você se conecta a um conjunto de réplicas, o construtor retorna imediatamente enquanto o cliente usa threads em segundo plano para se conectar ao conjunto de réplicas.
Se você construir um objeto mongoc_client_t
e imprimir imediatamente a representação de string de seu atributo nodes
, a lista poderá estar vazia enquanto o cliente se conecta aos membros do conjunto de réplicas.
Observação
Conjunto de réplicas no Docker
Quando um conjunto de réplicas é executado no Docker, ele pode expor apenas um endpoint MongoDB . Nesse caso, o conjunto de réplicas não é detectável. Especificar directConnection=false
em seu URI de conexão ou deixar essa opção sem definir pode impedir que seu aplicação se conecte a ele.
Em um ambiente de teste ou desenvolvimento, é possível conectar-se ao conjunto de réplicas especificando directConnection=true
. Em um ambiente de produção, recomendamos configurar o cluster para que cada instância do MongoDB seja acessível fora da rede virtual do Docker.
Documentação da API
Para obter mais informações sobre os objetos e funções mencionados neste guia, consulte a seguinte documentação da API: