Visão geral
Neste guia, você pode aprender como usar o driver C++ para atualizar documentos em uma coleção MongoDB . Você pode chamar o método update_one() para atualizar um único documento ou o método update_many() para atualizar vários documentos.
Dados de amostra
Os exemplos neste guia usam a collection restaurants no banco de dados sample_restaurants dos conjuntos de banco de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação C++ , instancie um mongocxx::client que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis db e collection :
auto db = client["sample_restaurants"]; auto collection = db["restaurants"];
Para aprender a criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o Guia de Introdução do MongoDB.
Atualizar operações
Você pode executar operações de atualização no MongoDB com os seguintes métodos:
update_one(), que atualiza o primeiro documento que corresponde aos critérios de pesquisaupdate_many(), que atualiza todos os documentos que correspondem aos critérios de pesquisa
Cada método de atualização exige os seguintes parâmetros:
documento de filtro de query : especifica quais documentos atualizar. Para obter mais informações sobre filtros de query, consulte a seção Documentos de filtro de query no manual do MongoDB Server .
Atualizar documento: especifica o operador de atualização ou o tipo de atualização a ser executada, e os campos e valores a serem alterados. Para obter uma lista de operadores de atualização e seu uso, consulte o guia Operadores de atualização de campo no manual do MongoDB Server .
Atualizar um documento
O exemplo seguinte utiliza o método update_one() para atualizar o valor name de um documento na coleção restaurants de "Bagels N Buns" para "2 Bagels 2 Buns":
auto query_filter = make_document(kvp("name", "Bagels N Buns")); auto update_doc = make_document(kvp("$set", make_document(kvp("name", "2 Bagels 2 Buns")))); auto result = collection.update_one(query_filter.view(), update_doc.view());
Atualizar muitos documentos
O exemplo seguinte utiliza o método update_many() para atualizar todos os documentos que têm um valor cuisine de "Pizza". Após a atualização, os documentos têm um valor cuisine de "Pasta".
auto query_filter = make_document(kvp("cuisine", "Pizza")); auto update_doc = make_document(kvp("$set", make_document(kvp("cuisine", "Pasta")))); auto result = collection.update_many(query_filter.view(), update_doc.view());
Personalizar a operação de atualização
Você pode modificar o comportamento dos métodos update_one() e update_many() passando uma instância da classe mongocxx::options::update como parâmetro opcional. A tabela seguinte descreve os campos que você pode definir em uma instância do mongocxx::options::update :
Campo | Descrição |
|---|---|
| Especifica se a operação de atualização executará uma operação de upsert se nenhum documento corresponder ao filtro de consulta. Para obter mais informações, consulte a declaração upsert no manual do MongoDB Server . O padrão |
| Especifica se a operação de atualização ignora a validação do documento . Isso permite atualizar documentos que não atendam aos requisitos de validação de esquema , se houver. Para obter mais informações sobre validação de esquema, consulte Validação de esquema no manual do MongoDB Server . |
| Especifica o tipo de agrupamento de idiomas a ser usado ao classificar os resultados. Para obter mais informações, consulte Agrupamento no manual do MongoDB Server . |
| Especifica a quais elementos da array uma atualização se aplica se a operação modificar os campos da array. |
| Define o índice para digitalizar documentos. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server . |
| Define a preocupação de gravação para a operação. Para obter mais informações, consulte Write Concern no manual do MongoDB Server . |
| Especifica um documento com uma lista de valores para melhorar a legibilidade da operação. Os valores devem ser expressões constantes ou fechadas que não façam referência aos campos do documento . Para obter mais informações, consulte a declaração let no manual do MongoDB Server . |
| Um comentário a ser anexado à operação. Para obter mais informações, consulte o guia de campos de comando de inserção no manual do MongoDB Server para obter mais informações. |
O exemplo a seguir usa o método update_many() para localizar todos os documentos que têm borough valor de "Manhattan". Em seguida, ele atualiza o valor borough nesses documentos para "Manhattan (north)". Como a opção upsert está definida como true, o driver C++ insere um novo documento se o filtro de query não corresponder a nenhum documento existente.
mongocxx::options::update opts{}; opts.upsert(true); auto query_filter = make_document(kvp("borough", "Manhattan")); auto update_doc = make_document(kvp("$set", make_document(kvp("borough", "Manhattan (north)")))); auto result = collection.update_many(query_filter.view(), update_doc.view(), opts);
Valor de retorno
Os métodos update_one() e update_many() retornam uma instância da classe mongocxx::result::update . Esta classe contém as seguintes funções de membro:
Função | Descrição |
|---|---|
| Retorna o número de documentos que corresponderam ao filtro de query, independentemente de quantos foram atualizados. |
| Retorna o número de documentos modificados pela operação de atualização. Se um documento atualizado for idêntico ao original, ele não será incluído nesta contagem. |
| Retorna o documento de resultado bruto para a operação. |
| Retorna o número do documento que foi atualizado no banco de dados. |
| Retorna a ID do documento que foi atualizado no banco de dados, se o driver tiver realizado um upsert. |
O exemplo a seguir usa o método update_many() para atualizar o campo name dos documentos correspondentes de "Dunkin' Donuts" para "Dunkin'". Ele chama a função de membro modified_count() para imprimir o número de documentos modificados:
auto query_filter = make_document(kvp("name", "Dunkin' Donuts")); auto update_doc = make_document(kvp("$set", make_document(kvp("name", "Dunkin'")))); auto result = collection.update_many(query_filter.view(), update_doc.view()); std::cout << "Modified documents: " << result->modified_count() << std::endl;
Modified documents: 206
Informações adicionais
Para saber mais sobre como criar filtros de queries, consulte o guia Especifique uma consulta.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: