Bancos de dados e coleções
Nesta página
Visão geral
Neste guia, você aprenderá a interagir com bancos de dados e collections do MongoDB usando o driver C.
O MongoDB organiza os dados em uma hierarquia dos seguintes níveis:
Bancos de dados: Estruturas de dados de nível superior em um MongoDB deployment que armazenam collections.
Collections: grupos de documentos do MongoDB . Elas são análogas às tabelas do banco de dados relacional.
Documentos: unidades que armazenam dados literais, como string, números, datas e outros documentos incorporados. Para obter mais informações sobre os tipos e estrutura de campo de documento , consulte o guia Documentos no manual do MongoDB Server .
Acessar um banco de dados
Acesse um banco de dados de dados usando a função mongoc_client_get_database()
.
O exemplo a seguir acessa um banco de dados denominado "test_database"
:
mongoc_database_t *database = mongoc_client_get_database (client, "test_database");
Acessar uma coleção
Acesse uma coleção usando as funções mongoc_client_get_collection()
ou mongoc_database_get_collection()
.
O exemplo seguinte acessa uma coleção denominada "test_collection"
utilizando a função mongoc_database_get_collection()
:
mongoc_collection_t *collection = mongoc_database_get_collection (database, "test_collection");
Dica
Se o nome da coleção fornecido ainda não existir no banco de dados, o MongoDB criará implicitamente a coleção quando você inserir os dados pela primeira vez nela.
Criar uma coleção
Use a função mongoc_database_create_collection()
para criar explicitamente uma coleção em um banco de banco de dados MongoDB .
O exemplo a seguir cria uma collection chamada "example_collection"
:
mongoc_collection_t *new_collection = mongoc_database_create_collection (database, "example_collection", NULL, &error);
Você pode especificar opções de collection, como tamanho máximo e regras de validação de documento , passando-as para dentro de uma estrutura bson_t
como o terceiro parâmetro para a função mongoc_database_create_collection()
. Para obter uma lista completa dos parâmetros opcionais, consulte a documentação do comando create no manual do MongoDB Server .
Obter uma lista de coleções
Você pode executar query de uma lista de coleções em um banco de dados de dados chamando a função mongoc_database_find_collections_with_opts()
. A função retorna um cursor contendo todas as collections no banco de banco de dados e seus metadados associados.
O exemplo a seguir chama a função mongoc_database_find_collections_with_opts()
e itera sobre o cursor para imprimir os 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 apenas os nomes das coleções no banco de banco de dados, chame a função mongoc_database_get_collection_names_with_opts()
da seguinte forma:
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 obter mais informações sobre a iteração em um cursor, consulte Acessar dados de um cursor.
Excluir uma coleção
Você pode excluir uma coleção do banco de dados de dados utilizando a função mongoc_collection_drop()
.
O exemplo a seguir exclui a collection "test_collection"
:
mongoc_collection_t *collection = mongoc_database_get_collection (database, "test_collection"); mongoc_collection_drop (collection, NULL);
Aviso
Eliminar uma coleção exclui todos os dados da coleção
Descartar uma collection do seu banco de dados exclui permanentemente todos os documentos e todos os índices dessa collection.
Solte uma coleção somente se os dados nela não forem mais necessários.
Configurar operações de leitura e escrita
Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.
Por padrão, os bancos de dados herdam essas configurações da instância mongoc_client_t
e as collections as herdam do banco de banco de dados. No entanto, você pode alterar essas configurações em seu banco de dados de dados usando uma das seguintes funções:
mongoc_database_set_read_prefs()
mongoc_database_set_read_concern()
mongoc_database_set_write_concern()
O exemplo seguinte mostra como alterar a preferência de leitura de um banco de dados de dados utilizando a função 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);
Você pode alterar as configurações de leitura e escrita em suas collections usando uma das seguintes funções:
mongoc_collection_set_read_prefs()
mongoc_collection_set_read_concern()
mongoc_collection_set_write_concern()
O exemplo seguinte mostra como alterar a preferência de leitura de uma collection usando a função 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);
Dica
Para ver os tipos de read preferences disponíveis, consulte a documentação da API.
Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :
Conjuntos de tags
No MongoDB Server, você pode aplicar marcações de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério de sua escolha. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.
Por padrão, o driver C ignora as tags ao escolher um membro para ler. Para instruir o driver C a preferir determinadas marcações, use a função mongoc_read_prefs_set_tags()
para definir as marcações em uma instância do mongoc_read_prefs_t
.
No exemplo de código a seguir , o conjunto de tags passado para a função mongoc_read_prefs_set_tags()
instrui o driver C a preferir leituras do centro de dados de Nova York ('dc': 'ny'
) e a voltar para o centro de dados de São 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"));
LocalThreshold
Se vários membros do conjunto de réplicas corresponderem à preferência de leitura e aos conjuntos de tags especificados, o driver C lerá a partir dos membros do conjunto de réplicas mais próximos, escolhidos de acordo com o tempo de ping .
Por padrão, o driver usa somente os membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, inclua o parâmetro localThresholdMS
no URI da string de conexão .
O exemplo a seguir se conecta a uma MongoDB deployment em execução no localhost:27017
e especifica um limite local de 35 milissegundos:
const char *uri_string = "mongodb://localhost:27017/?localThresholdMS=35"; mongoc_client_t *client = mongoc_client_new (uri_string);
No exemplo anterior, o driver C distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.
Documentação da API
Para saber mais sobre qualquer uma das funções discutidas nesta guia, consulte a seguinte documentação da API: