Visão geral
Neste guia, você pode aprender como modificar documentos no MongoDB usando a atualização e substituição de operações.
As operações de atualização alteram os campos que você especifica, deixando outros campos e valores inalterados. As operações de substituição removem todos os campos existentes de um documento, exceto o campo _id, e substituem os campos removidos por novos campos e valores.
Este guia inclui as seguintes seções:
Atualizar documentos descreve como usar o driver para executar operações de atualização
Substituir um documento descreve como usar o driver para executar operações de substituição
Modificar comportamento de atualização e substituição descreve como modificar o comportamento padrão dos métodos descritos neste guia
Informações adicionais fornecem links para recursos e documentação da API para os tipos e métodos mencionados neste guia
Atualizar padrão do documento
No MongoDB, todos os métodos para alterar documentos seguem o mesmo padrão:

Observação
changeX() é um espaço reservado e não um método real.
Esses métodos usam os seguintes parâmetros:
Um filtro de query para corresponder a um ou mais documentos a serem alterados
Um documento de atualização que especifica as alterações de campo e valor
(Opcional) Um tipo de opções para modificar o comportamento padrão do método
O driver Rust oferece os seguintes métodos para alterar documentos:
update_one()update_many()replace_one()
Você pode recuperar e modificar dados em uma ação usando operações compostas. Para saber mais, consulte o guia sobre operações compostas.
O campo _id
Cada documento em uma MongoDB collection tem um campo _id exclusivo e imutável. Se você tentar alterar o campo _id por meio de uma operação de atualização ou substituição, o driver gerará um WriteError e não executará atualizações.
Atualize documentos
Você pode realizar operações de atualização usando 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
Parâmetros
Cada método utiliza um filtro de query e um documento de atualização que inclui pelo menos um operador de atualização. O operador de atualização especifica o tipo de atualização a ser executada e inclui os campos e valores que descrevem a alteração. Atualize os documentos usando o seguinte formato:
doc! { "<update operator>": doc! { "<field>": <value> } }
Para especificar várias atualizações em um documento de atualização, use o seguinte formato:
doc! { "<update operator>": doc!{"<field>": <value>}, "<update operator>": doc!{"<field>": <value>}, ... }
Consulte o manual do servidor MongoDB para obter uma lista completa de operadores de atualização e descrições.
Observação
Pipelines de agregação em operações de atualização
Se você estiver usando o MongoDB Server versão 4.2 ou posterior, poderá usar aggregation pipelines em operações de atualização. Para saber mais sobre os estágios de aggregation que têm suporte do MongoDB em aggregation pipelines, consulte nosso tutorial sobre como executar atualizações com aggregation pipelines.
As operações de atualização também usam um parâmetro UpdateOptions . Para saber mais sobre como modificar o comportamento dos métodos de atualização, consulte a seção Modificar comportamento de atualização e substituição deste guia.
Valor de retorno
Os métodos update_one() e update_many() retornam um tipo UpdateResult se a operação for bem-sucedida. O tipo UpdateResult contém as seguintes propriedades que descrevem a operação:
Propriedade | Descrição |
|---|---|
| O número de documentos correspondidos pelo filtro |
| O número de documentos modificados pela operação |
| O |
Se vários documentos corresponderem ao filtro de query que você passa para UpdateOne(), o método selecionará e atualizará o primeiro documento correspondente. Se nenhum documento corresponder ao filtro de query, a operação de atualização não fará alterações.
Exemplo de atualização
Os seguintes documentos descrevem os funcionários de uma empresa:
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Marketing", "role": "Director", "bonus": 3000 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Marketing", "role": "Consultant", "bonus": 1800 }
Este exemplo executa uma operação de atualização com o método update_many() . O método update_many() utiliza os seguintes parâmetros:
Um filtro de query para corresponder a documentos onde o valor do campo
departmenté"Marketing"Um documento de atualização que contém as seguintes atualizações:
Um operador
$setpara alterar o valor dedepartmentpara"Business Operations"erolepara"Analytics Specialist"Um operador
$incpara aumentar o valor debonusem500
let update_doc = doc! { "$set": doc! { "department": "Business Operations", "role": "Analytics Specialist" }, "$inc": doc! { "bonus": 500 } }; let res = my_coll .update_many(doc! { "department": "Marketing" }, update_doc, None) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 2
Os seguintes documentos refletem as alterações resultantes da operação de atualização anterior:
{ "_id": ObjectId('4337'), "name": "Shelley Olson", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 3500 }, { "_id": ObjectId('4902'), "name": "Remi Ibrahim", "department": "Business Operations", "role": "Analytics Specialist", "bonus": 2300 }
Atualizar por exemplo do ObjectId
O seguinte documento descreve um funcionário de uma empresa:
{ "_id": ObjectId('4274'), "name": "Jill Millerton", "department": "Marketing", "role": "Consultant" }
Este exemplo query o documento anterior especificando um filtro de query para corresponder ao valor _id exclusivo do documento. Em seguida, o código executa uma operação de atualização com o método update_one() . O método update_one() utiliza os seguintes parâmetros:
Filtro de query que corresponde a um documento no qual o valor do campo
_idéObjectId('4274')Atualizar documento que cria instruções para definir o valor de
namepara"Jill Gillison"
let id = ObjectId::from_str("4274").expect("Could not convert to ObjectId"); let filter_doc = doc! { "_id": id }; let update_doc = doc! { "$set": doc! { "name": "Jill Gillison" } }; let res = my_coll .update_one(filter_doc, update_doc, None) .await?; println!("Modified documents: {}", res.modified_count);
Modified documents: 1
O documento a seguir reflete as alterações resultantes da operação de atualização anterior:
{ "_id": ObjectId('4274'), "name": "Jill Gillison", "department": "Marketing", "role": "Consultant" }
Dica
Para saber mais sobre o campo _id , consulte a seção _id Field desta página ou a documentação do método ObjectId() no manual do servidor.
Substituir um documento
Você pode executar uma operação de substituição pelo método replace_one() . Este método substitui todos os campos existentes de um documento, exceto o campo _id por novos campos e valores que você especifica.
Parâmetros
O método replace_one() usa um filtro de query e um documento de substituição, que contém os campos e valores que substituirão um documento existente. Os documentos de substituição usam o seguinte formato:
doc! { "<field>": <value>, "<field>": <value>, ... }
As operações de substituição também usam um parâmetro UpdateOptions . Para saber mais sobre como modificar o comportamento do método replace_one() , consulte a seção Modificar comportamento de atualização e substituição deste guia.
Return Values
O método replace_one retorna um tipo UpdateResult se a operação for bem-sucedida. O tipo UpdateResult contém as seguintes propriedades que descrevem a operação:
Propriedade | Descrição |
|---|---|
| O número de documentos correspondidos pelo filtro |
| O número de documentos modificados pela operação |
| O |
Se vários documentos corresponderem ao filtro de query que você passa para replace_one(), o método selecionará e substituirá o primeiro documento correspondente. Se nenhum documento corresponder ao filtro de query, a operação de substituição não fará alterações.
Exemplo de substituição
O seguinte documento descreve um funcionário de uma empresa:
{ "_id": ObjectId('4501'), "name": "Matt DeGuy", "role": "Consultant", "team_members": [ "Jill Gillison", "Susan Lee" ] }
Este exemplo utiliza o método replace_one() para substituir o documento anterior por um que tenha os seguintes campos:
Um valor
namede"Susan Lee"Um valor
rolede"Lead Consultant"Um valor
team_membersde[ "Jill Gillison" ]
let replace_doc = doc! { "name": "Susan Lee", "role": "Lead Consultant", "team_members": vec! [ "Jill Gillison" ] }; let res = my_coll .replace_one(doc! { "name": "Matt DeGuy" }, replace_doc, None) .await?; println!( "Matched documents: {}\nModified documents: {}", res.matched_count, res.modified_count );
Matched documents: 1 Modified documents: 1
O documento substituído contém o conteúdo do documento de substituição e o campo _id imutável:
{ "_id": ObjectId('4501'), "name": "Susan Lee", "role": "Lead Consultant", "team_members": [ "Jill Gillison" ] }
Modificar atualização e substituir comportamento
Você pode modificar o comportamento dos métodos update_one(), update_many e replace_one() construindo e passando uma estrutura UpdateOptions como um parâmetro.
Observação
Opções de Instanciação
O driver Rust implementa o padrão de design Builder para a criação de muitos tipos diferentes, incluindo UpdateOptions. Você pode usar o método builder() de cada tipo para construir uma instância de opções encadeando as funções do construtor de opções, uma de cada vez.
A tabela a seguir descreve as opções disponíveis em UpdateOptions:
Opção | Descrição |
|---|---|
| O conjunto de filtros que especificam os elementos da array aos quais a atualização se aplica. |
| Se |
| Se for verdadeiro, a operação insere um documento se nenhum documento corresponder ao filtro de queries. |
| O agrupamento a ser usado ao classificar os resultados. Para saber mais sobre agrupamentos, consulte o guia Agrupamentos. |
| O índice a ser usado para a operação. Esta opção está disponível apenas ao conectar-se às versões 4.2 e posteriores do MongoDB Server. |
| O write concern para a operação. Se você não definir esta opção, a operação herdará o write concern definido para a coleção. Para saber mais sobre write concern, consulte write concern no manual do servidor. |
| Um mapa de parâmetros e valores. Esses parâmetros podem ser acessados como variáveis em expressões de agregação. Esta opção está disponível apenas ao conectar-se às versões 5.0 e posteriores do MongoDB Server. |
| Um valor |
O seguinte código mostra como construir uma instância UpdateOptions e passá-la para o método update_one() :
let opts: UpdateOptions = UpdateOptions::builder().upsert(true).build(); let res = my_coll.update_one(filter_doc, update_doc, opts).await?;
Informações adicionais
Para obter mais informações sobre os conceitos deste guia, consulte a seguinte documentação:
Para exemplos executáveis da atualização e substituição de operações, consulte os seguintes exemplos de uso:
Para saber mais sobre os operadores de atualização, consulte Operadores de atualização no manual do servidor.
Documentação da API
Para saber mais sobre os métodos e tipos mencionados neste guia, consulte a documentação da API abaixo: