Menu Docs
Página inicial do Docs
/ / /
Driver C++

Bancos de dados e coleções

Nesta página

  • Visão geral
  • Acessar um banco de dados
  • Acessar uma coleção
  • Criar uma coleção
  • Obter uma lista de coleções
  • Excluir uma coleção
  • Configurar operações de leitura e escrita
  • Definir configurações do banco de dados
  • Definir configurações de coleção
  • Conjuntos de tags
  • LocalThreshold
  • Documentação da API

Neste guia, você pode aprender como usar o driver C++ para interagir com bancos de dados e coleções MongoDB .

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 .

Você pode acessar um banco de dados de dados chamando a função database() em um objeto mongocxx::client e passando o nome do banco de banco de dados como um argumento.

O exemplo a seguir acessa um banco de dados denominado "test_database" :

auto db = client.database("test_database");

Como alternativa, você pode usar o operador [] em um mongocxx::client como uma abreviação para a função database(), conforme mostrado no código a seguir:

auto db = client["test_database"];

Você pode acessar uma coleção chamando a função collection() em um objeto mongocxx::database e passando o nome da coleção como um argumento.

O exemplo a seguir acessa uma coleção denominada "test_collection":

auto coll = database.collection("test_collection");

Como alternativa, você pode usar o operador [] em um mongocxx::database como uma abreviação para a função collection(), conforme mostrado no código a seguir:

auto coll = 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.

Você pode utilizar a função 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":

auto coll = database.create_collection("example_collection");

Você pode especificar opções de collection, como tamanho máximo e regras de validação de documento , passando-as para dentro de um documento BSON como o segundo parâmetro para a create_collection() função. Para obter uma lista completa dos parâmetros opcionais, consulte a documentação do comando create no manual do MongoDB Server .

Você pode recuperar uma lista de coleções em um banco de dados de dados ligando para a função list_collections(). 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 list_collections() e itera sobre o cursor para imprimir os resultados:

auto cursor = database.list_collections();
for(auto&& doc : cursor) {
std::cout << bsoncxx::to_json(doc) << std::endl;
}
Collection: { "name" : "test_collection", "type" : "collection", ...}
Collection: { "name" : "example_collection", "type" : "collection", ... }

Para executar query apenas dos nomes das coleções no banco de banco de dados, chame a função list_collection_names() como mostrado no exemplo a seguir:

auto list = database.list_collection_names();
for(auto&& name : list) {
std::cout << name << std::endl;
}
test_collection
example_collection

Para obter mais informações sobre a iteração em um cursor, consulte o guia Acessar dados de um cursor.

Você pode excluir uma coleção do banco de dados de dados utilizando a função drop() .

O exemplo a seguir exclui a collection "test_collection" :

auto coll = database["test_collection"];
coll.drop();

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.

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 do objeto mongocxx::client e as collections as herdam do banco de banco de dados. No entanto, você pode alterar essas configurações usando uma das seguintes funções em seu banco de dados de dados ou coleção:

  • read_preference()

  • read_concern()

  • write_concern()

Para saber mais sobre configurações de leitura e escrita, consulte os seguintes guias no manual do MongoDB Server :

Este exemplo mostra como definir as configurações de leitura para seu banco de dados de dados usando as seguintes funções:

  • read_preference(): define a preferência de leitura para k_secondary

  • read_concern(): Define a preocupação de leitura como k_majority

auto db = client["test_database"];
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_majority);
db.read_preference(rp);
db.read_concern(rc);

Dica

Este exemplo mostra como especificar a preocupação de gravação da sua coleção usando as seguintes funções:

  • read_concern(): Define a preocupação de leitura como k_local

  • write_concern(): define a preocupação de gravação como k_acknowledged

auto coll = client["test_database"]["test_collection"];
mongocxx::read_concern rc;
rc.acknowledge_level(mongocxx::read_concern::level::k_local);
mongocxx::write_concern wc;
wc.acknowledge_level(mongocxx::write_concern::level::k_acknowledged);
coll.read_concern(rc);
coll.write_concern(wc);

Dica

Para ver uma descrição de cada nível de read e preocupação de gravação , consulte a seguinte documentação da API:

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 marcações ao escolher um membro para ler. Para instruir o driver C++ a preferir determinadas tags, crie um objeto mongocxx::read_preference e chame sua função de membro tags(). Passe suas tags preferidas como argumento de array para tags().

No exemplo de código a seguir , o conjunto de tags passado para a função 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"):

auto tag_set_ny = make_document(kvp("dc", "ny"));
auto tag_set_sf = make_document(kvp("dc", "sf"));
mongocxx::read_preference rp;
rp.mode(mongocxx::read_preference::read_mode::k_secondary);
rp.tags(make_array(tag_set_ny, tag_set_sf).view());

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:

mongocxx::uri uri("mongodb://localhost:27017/?localThresholdMS=35");
mongocxx::client client(uri);

No exemplo anterior, o driver C++ distribui leituras entre membros correspondentes dentro de 35 milissegundos do tempo de ping do membro mais próximo.

Para saber mais sobre qualquer uma das funções discutidas nesta guia, consulte a seguinte documentação da API:

Voltar

Transações