Visão geral
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().
Dados de amostra
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.
Atualizar operações
Você pode atualizar documentos no MongoDB com os seguintes métodos:
updateOne(), que atualiza o primeiro documento que corresponde aos critérios de pesquisaupdateMany(), 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 .
Atualizar um exemplo de documento
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
Exemplo de atualização de muitos documentos
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
Personalizar a operação de atualização
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 |
|---|---|
| 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 |
| 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 |
| 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 . |
| Fornece uma lista de filtros que você especifica para selecionar a quais elementos da array a atualização se aplica. |
| 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 . |
| 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 . |
| 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. |
Exemplo de modificação de atualização
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
Valor de retorno
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 |
|---|---|
| Retorna o número de documentos que corresponderam ao filtro de query, independentemente de quantas atualizações foram realizadas. |
| 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 |
| Retorna o valor de |
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.
Informações adicionais
Para exibir exemplos de código executáveis que demonstram como atualizar documentos usando o driver Scala, consulte Gravar dados no MongoDB.
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: