Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Menu Docs

Atualize documentos

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.

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.

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 pesquisa

  • update_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 .

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());

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());

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

upsert

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
falseé.

bypass_document_validation

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 .
O padrão false é.

collation

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 .

array_filters

Especifica a quais elementos da array uma atualização se aplica se a operação modificar os campos da array.

hint

Define o índice para digitalizar documentos. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server .

write_concern

Define a preocupação de gravação para a operação. Para obter mais informações, consulte Write Concern no manual do MongoDB Server .

let

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 .

comment

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);

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

matched_count()

Retorna o número de documentos que corresponderam ao filtro de query, independentemente de quantos foram atualizados.

modified_count()

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.

result()

Retorna o documento de resultado bruto para a operação.

upserted_count()

Retorna o número do documento que foi atualizado no banco de dados.

upserted_id()

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

Para saber mais sobre como criar filtros de queries, consulte o guia Especifique uma consulta.

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: