Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ / /

Modificar documentos

Nesta página

  • Visão geral
  • Uma observação sobre _id
  • Update
  • Parâmetros
  • Return Values
  • Substituir
  • Parâmetros
  • Return Values
  • Informações adicionais
  • Documentação da API

Neste guia, você pode aprender a modificar documentos no MongoDB usando operações de atualização e substituição.

As operações de atualização alteram os campos que você especifica, deixando outros campos e valores inalterados. A substituição de operações remove todos os campos existentes, exceto _id em um documento e substitui os campos excluídos pelos novos campos e valores especificados.

No MongoDB, todos os métodos para modificar documentos seguem o mesmo padrão:

Alterar assinatura do método

Observação

Espaço reservado

changeX é um espaço reservado e não um método real.

O padrão espera que você:

  • Especifique um filtro de consulta para corresponder a um ou mais documentos para modificar.

  • Especifique as alterações de campo e valor.

  • Se você precisar modificar o comportamento do método, especifique as opções.

O driver fornece os seguintes métodos para modificar documentos:

  • UpdateByID()

  • UpdateOne()

  • UpdateMany()

  • ReplaceOne()

  • BulkWrite() (não discutido neste guia)

  • FindOneAndUpdate() (não discutido neste guia)

  • FindOneAndReplace() (não discutido neste guia)

Cada documento em uma coleção do MongoDB tem um campo _id exclusivo e imutável. Você não pode usar as operações de atualização e substituição para alterar o campo _id. Se você tentar alterar esse campo, os métodos de atualização e substituição retornarão um WriteError.

Use o método UpdateOne() ou UpdateByID() para atualizar um único documento.

Use o método UpdateMany() para atualizar vários documentos.

Cada método utiliza 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. O documento de atualização também inclui os campos e valores que descrevem a alteração. Atualize os documentos usando o seguinte formato:

bson.D{{"<update operator>", bson.D{{"<field>", <value>},
{"<field>", <value>}, ... }},
{"<update operator>", ... }, ... }

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 agregação pipelines compostos por um subconjunto de estágios de agregação em operações de atualização. Para saber mais sobre os estágios de agregação que têm suporte do MongoDB em agregação pipelines, consulte nosso tutorial sobre como executar atualizações com agregação pipelines.

UpdateOne(), UpdateByID() e UpdateMany() retornam um tipo UpdateResult que contém informações sobre a operação de atualização, se a operação for bem-sucedida. O tipo UpdateResult contém as seguintes propriedades:

Propriedade
Descrição
MatchedCount
O número de documentos correspondidos pelo filtro
ModifiedCount
O número de documentos modificados pela operação
UpsertedCount
O número de documentos atualizados pela operação
UpsertedID
O _id do documento atualizado ou nil, se não houver nenhum

Se vários documentos corresponderem ao filtro de query passado 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.

Consulte nossoguia de upsert para saber como inserir um novo documento se nenhum documento corresponder ao filtro de query.

O documento a seguir descreve um funcionário:

{
"_id" : 2158,
"name" : "Mary Shelley",
"department" : "Marketing",
"role" : "Marketing Analyst",
"bonus" : 2500,
...
}

O exemplo a seguir utiliza o método UpdateByID() para:

  • Corresponde ao documento no qual o valor de _id é 2158.

  • Defina o campo name como "Mary Wollstonecraft Shelley" e o campo role como "Marketing Director".

  • Aumente o valor do campo bonus em 2000.

filter := bson.D{{"_id", 2158}}
update := bson.D{{"$set", bson.D{{"name", "Mary Wollstonecraft Shelley"},
{"role", "Marketing Director"}}}, {"$inc", bson.D{{"bonus", 2000}}}}
result, err := collection.UpdateOne(context.TODO(), filter, update)
fmt.Printf("Documents matched: %v\n", result.MatchedCount)
fmt.Printf("Documents updated: %v\n", result.ModifiedCount)
Documents matched: 1
Documents updated: 1

O seguinte mostra o documento atualizado resultante da operação de atualização anterior:

{
"_id" : 2158,
"name" : "Mary Wollstonecraft Shelley",
"department" : "Marketing",
"role" : "Marketing Director",
"bonus" : 4500,
...
}

Use o método ReplaceOne() para substituir um único documento.

ReplaceOne() espera um documento de substituição, que é o documento que você deseja substituir um documento existente. Os documentos de substituição usam o seguinte formato:

bson.D{{"<field>", "<value>"}, {"<field>", "<value>"}, ... }

ReplaceOne() retorna um tipo de UpdateResult que contém informações sobre a operação de substituição se a operação for bem-sucedida. O tipo UpdateResult contém as seguintes propriedades:

Propriedade
Descrição
MatchedCount
O número de documentos correspondidos pelo filtro
ModifiedCount
O número de documentos modificados pela operação
UpsertedCount
O número de documentos atualizados pela operação
UpsertedID
O _id do documento atualizado ou nil, se não houver nenhum

Se vários documentos corresponderem ao filtro de query passado para ReplaceOne(), o método selecionará e substituirá o primeiro documento correspondente. Se nenhum documento corresponder ao filtro de query, a operação de substituição falhará.

O documento a seguir descreve um item de cozinha:

{
"_id" : 2056,
"item" : "Mug",
"brand" : "Simply Ceramics",
"price" : 2.99,
"material" : "Glass"
}

O exemplo a seguir usa o método ReplaceOne() para substituir este documento por um que contenha um campo item com o valor de "Cup" e um campo quantity com um valor de 107:

filter := bson.D{{"_id", 2056}}
replacement := bson.D{{"item", "Cup"}, {"quantity", 107}}
result, err := collection.ReplaceOne(context.TODO(), filter, replacement)
fmt.Printf("Documents matched: %v\n", result.MatchedCount)
fmt.Printf("Documents replaced: %v\n", result.ModifiedCount)
Documents matched: 1
Documents replaced: 1

O documento substituído contém o conteúdo do documento de substituição e o campo imutável _id da seguinte forma:

{
"_id" : 2056,
"item" : "Cup",
"quantity" : 107
}

Para exemplos executáveis da atualização e substituição de operações, consulte os seguintes exemplos de uso:

Para saber mais sobre as operações mencionadas, consulte os seguintes guias:

Para saber mais sobre como atualizar elementos de array, consulte Atualizar arrays em um documento.

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

Voltar

Excluir