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.
Menu Docs

Atualize documentos

Neste guia, você pode aprender como usar o driver Scala para atualizar documentos em uma coleção MongoDB utilizando os métodos updateOne() e updateMany().

Os exemplos neste guia usam a restaurants collection no sample_restaurants banco de dados dos conjuntos de dados de amostra do Atlas . Para acessar essa collection a partir do seu aplicação Scala, crie um MongoClient que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database e collection:

val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants")
val collection: MongoCollection[Document] = database.getCollection("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 atualizar documentos no MongoDB com os seguintes métodos:

  • updateOne(), que atualiza o primeiro documento que corresponde aos critérios de pesquisa

  • updateMany(), que atualiza todos os documentos que correspondem aos critérios de pesquisa

Cada método de atualização exige os seguintes parâmetros:

  • Filtro de query, que corresponde aos documentos que você deseja atualizar. Para saber mais sobre filtros de query, consulte o guia Especificar uma query.

  • documento de atualização , que especifica o operador de atualização e os campos e valores a serem atualizados. O operador de atualização especifica o tipo de atualização a ser executada. Para visualizar uma lista de operadores de atualização e saber mais sobre seus usos, consulte a página do guia Operadores de atualização de campo no manual do MongoDB Server .

O exemplo seguinte utiliza o método updateOne() para atualizar o valor do campo name de um documento de "Happy Garden" para "Mountain House". O documento de atualização utiliza o método set() para atualizar o valor do campo name:

val filter = equal("name", "Happy Garden")
val update = set("name", "Mountain House")
val observable: Observable[UpdateResult] = collection.updateOne(filter, update)
observable.subscribe(new Observer[UpdateResult] {
override def onNext(result: UpdateResult): Unit =
println(s"Updated document count: ${result.getModifiedCount}")
override def onError(e: Throwable): Unit = println(s"Failed: ${e.getMessage}")
override def onComplete(): Unit = println("Completed")
})
Updated document count: 1
Completed

O exemplo a seguir usa o método updateMany() para atualizar todos os documentos nos quais o valor do campo name é "Starbucks". O documento de atualização utiliza o método rename() para alterar o nome do campo address para location:

val filter = equal("name", "Starbucks")
val update = rename("address", "location")
val observable: Observable[UpdateResult] = collection.updateMany(filter, update)
observable.subscribe(new Observer[UpdateResult] {
override def onNext(result: UpdateResult): Unit =
println(s"Updated document count: ${result.getModifiedCount}")
override def onError(e: Throwable): Unit = println(s"Failed: ${e.getMessage}")
override def onComplete(): Unit = println("Completed")
})
Updated document count: 11
Completed

Os métodos updateOne() e updateMany() aceitam opcionalmente um parâmetro que define opções para configurar a operação de atualização. Se você não especificar nenhuma opção, o driver executará operações de atualização com as configurações padrão.

A tabela a seguir descreve os métodos de configuração que você pode usar para configurar uma instância UpdateOptions :

Método
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

sort()

Define os critérios de classificação a serem aplicados à operação. Se vários documentos corresponderem ao filtro de query que você passa para o método updateOne(), a operação atualizará o primeiro resultado. Você pode definir essa opção como para aplicar um pedido a documentos correspondentes para ter mais controle sobre qual documento é atualizado.

bypassDocumentValidation()

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 .

arrayFilters()

Fornece uma lista de filtros que você especifica para selecionar a quais elementos da array a atualização se aplica.

hint()

Define o índice a ser usado na correspondência de documentos. Para obter mais informações, consulte a declaração de dica no manual do MongoDB Server .

let()

Fornece um mapa de nomes e valores de parâmetros para definir variáveis de nível superior para a 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()

Define um comentário a ser anexado à operação. Para obter mais informações, consulte o guia de campos de comando de atualização no manual do MongoDB Server para obter mais informações.

Este exemplo cria e passa opções para o método updateOne(). O exemplo usa o método assistente equal() para corresponder a documentos nos quais o valor do campo name é "Sunrise Pizzeria". Em seguida, ele usa o método set() para definir o valor do campo borough no primeiro documento correspondente como "Queens" e o valor do campo cuisine como "Italian". O código usa o método combine() para especificar várias atualizações em um documento de atualização.

Como a opção upsert está definida como true na instância UpdateOptions, o driver insere um novo documento que tenha os campos e valores especificados no filtro e documento de atualização se o filtro de query não corresponder a nenhum documento existente.

val filter = equal("name", "Sunrise Pizzeria")
val opts = UpdateOptions().upsert(true)
val update = combine(
set("borough", "Queens"),
set("cuisine", "Italian")
)
val observable: Observable[UpdateResult] = collection.updateOne(filter, update, opts)
observable.subscribe(new Observer[UpdateResult] {
override def onNext(result: UpdateResult): Unit =
println(s"Updated document count: ${result.getModifiedCount}")
override def onError(e: Throwable): Unit = println(s"Failed: ${e.getMessage}")
override def onComplete(): Unit = println("Completed")
})
Updated document count: 1
Completed

Os métodos updateOne() e updateMany() retornam um objeto UpdateResult . Você pode utilizar os seguintes métodos para acessar informações de uma instância do UpdateResult :

Método
Descrição

getMatchedCount()

Retorna o número de documentos que corresponderam ao filtro de query, independentemente de quantas atualizações foram realizadas.

getModifiedCount()

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.

wasAcknowledged()

Retorna true se o servidor reconheceu o resultado.

getUpsertedId()

Retorna o valor de _id do documento que foi atualizado no banco de dados, se o driver executou um upsert.

Observação

Se o método wasAcknowledged() retornar false, a tentativa de acessar outras informações da instância UpdateResult resultará em uma exceção InvalidOperation . O driver não pode determinar esses valores se o servidor não reconhecer a operação de gravação.

Para exibir exemplos de código executáveis que demonstram como atualizar documentos usando o driver Scala, consulte Gravar dados no MongoDB.

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