Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/ /

Atualizar vários documentos

Você pode atualizar diversos documentos usando o método updateMany() em um objeto MongoCollection. O método aceita um filtro que corresponde ao documento que você deseja atualizar e uma declaração de atualização que instrui o driver como alterar o documento correspondente. O método updateMany() atualiza todos os documentos na collection que correspondem ao filtro.

Para realizar uma atualização com o método updateMany(), você deve utilizar um filtro de query e um documento de atualização. O filtro de query especifica quais documentos da collection devem ser correspondidos, e o documento de atualização fornece instruções sobre quais alterações devem ser feitas neles.

Opcionalmente, você pode passar uma instância de UpdateOptions para o método updateMany() para modificar o comportamento da chamada. Por exemplo, se você definir o campo upsert do objeto UpdateOptions como true e nenhum documento corresponder ao filtro de query especificado, a operação insere um novo documento composto pelos campos do documento de query e de atualização.

Após a execução bem-sucedida, o método updateMany() gera uma instância de UpdateResult. Você pode recuperar informações, como o número de documentos modificados, chamando o método getModifiedCount(). Se você especificou upsert(true) em um objeto UpdateOptions e a operação resultar em uma inserção, você poderá recuperar o campo _id do novo documento chamando o método getUpsertedId() na instância UpdateResult.

Se sua operação de atualização falhar, o driver gerará uma exceção e não atualizará nenhum dos documentos correspondentes ao filtro. Por exemplo, se você tentar definir um valor para o campo imutável _id em seu documento de atualização, o método updateMany() não atualizará nenhum documento e lançará um MongoWriteException com a mensagem:

Performing an update on the path '_id' would modify the immutable field '_id'

Se o documento de atualização contiver uma alteração que viole as regras de índice único, o método lançará um MongoWriteException com uma mensagem de erro que deve ser semelhante a esta:

E11000 duplicate key error collection: ...

Para obter mais informações sobre os tipos de exceções geradas em condições específicas, consulte a documentação da API para updateMany(), cujo link está no final desta página.

Neste exemplo, usamos um construtor Filter para filtrar nossa query para filmes no gênero "Discutido com frequência".

Em seguida, atualizamos documento que correspondem a nossa query na collection movies do reconhecimento de data center sample_mflix . Realizamos as seguintes atualizações nos documentos correspondentes:

  • Adicione Frequently Discussed à array de genres somente se ela ainda não existir

  • Defina o valor de lastUpdated para o horário atual.

Usamos o construtor Updates , uma classe de fábrica que contém métodos de assistente estática para construir o documento de atualização. Embora você possa passar um documento de atualização em vez de usar o construtor, o construtor oferece verificação de tipo e sintaxe simplificada. Leia nossoguia sobre atualizações na seção Construtores para obter mais informações.

Observação

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o Guia de conexão.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.client.model.Updates
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
import java.time.LocalDateTime
data class Movie(
val num_mflix_comments: Int,
val genres: List<String>,
val lastUpdated: LocalDateTime
)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val query = Filters.gt(Movie::num_mflix_comments.name, 50)
val updates = Updates.combine(
Updates.addToSet(Movie::genres.name, "Frequently Discussed"),
Updates.currentDate(Movie::lastUpdated.name)
)
try {
val result = collection.updateMany(query, updates)
println("Modified document count: " + result.modifiedCount)
} catch (e: MongoException) {
System.err.println("Unable to update due to an error: $e")
}
mongoClient.close()
}
Modified document count: 53

Depois de executar o exemplo, você deverá ver uma saída semelhante.

Se você consultar o documento ou documentos atualizado(s), ele(s) deverá(ão) se parecer com o seguinte:

Movie(num_mflix_comments=100, genres=[ ... Frequently Discussed], lastUpdated= ... )

Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API:

  • UpdateMany

  • UpdateOptions

  • combine()

  • addToSet()

  • currentDate()

  • UpdateResult

Voltar

Atualizar um documento