Atualizar um documento
Você pode atualizar um único documento usando o método updateOne()
em um objeto MongoCollection
. O método aceita um filtro que corresponde ao documento que você deseja atualizar e uma instrução de atualização que instrui o driver como alterar o documento correspondente. O método updateOne()
atualiza somente o primeiro documento que corresponde ao filtro.
Para realizar uma atualização com o método updateOne()
, você deve utilizar um filtro de query e um documento de atualização. O filtro de query especifica os critérios para determinar em qual documento realizar a atualização e o documento de atualização fornece instruções sobre quais alterações devem ser feitas nele.
Opcionalmente, você pode passar uma instância de UpdateOptions
para o método updateOne()
para especificar o comportamento do método. Por exemplo, se você definir o campo upsert
do objeto UpdateOptions
como true
, a operação inserirá um novo documento dos campos na query e atualizará o documento se nenhum documento corresponder ao filtro de query. Consulte o link para a documentação da API de UpdateOptions
na parte inferior desta página para obter mais informações.
Após a execução bem-sucedida, o método updateOne()
gera uma instância de UpdateResult
. Você pode recuperar informações como o número de documentos modificados chamando o método getModifiedCount()
ou o valor do campo _id
chamando o método getUpsertedId()
se tiver especificado upsert(true)
em uma instância UpdateOptions
.
Se a sua operação de atualização falhar, o driver emitirá uma exceção. Por exemplo, se você tentar definir um valor para o campo imutável _id
em seu documento de atualização, o método 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 updateOne()
vinculada na parte inferior desta página.
Exemplo
Neste exemplo, usamos um construtor Filter
para consultar a coleção em busca de um filme com o título "Cool Runs 2".
Em seguida, realizamos as seguintes atualizações na primeira correspondência da nossa query na collection movies
do banco de dados sample_mflix
:
Defina o valor de
runtime
para99
Adicione
Sports
à array degenres
somente se ela ainda não existirDefina 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. Consulte o guia no construtor de atualizações 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.UpdateOptions 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 title: String, val runtime: 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.eq(Movie::title.name, "Cool Runnings 2") val updates = Updates.combine( Updates.set(Movie::runtime.name, 99), Updates.addToSet(Movie::genres.name, "Sports"), Updates.currentDate(Movie::lastUpdated.name) ) val options = UpdateOptions().upsert(true) try { val result = collection.updateOne(query, updates, options) println("Modified document count: " + result.modifiedCount) println("Upserted id: " + result.upsertedId) // only contains a non-null value when an upsert is performed } catch (e: MongoException) { System.err.println("Unable to update due to an error: $e") } mongoClient.close() }
Depois de executar o exemplo, você verá um resultado parecido com este:
Modified document count: 1 Upserted id: null
Ou se o exemplo resultou em um upsert:
Modified document count: 0 Upserted id: BsonObjectId{value=...}
Se você consultar o documento atualizado, ele deverá se parecer com o seguinte:
Movie(title=Cool Runnings 2, runtime=99, genres=[ ... Sports], lastUpdated= ... )
Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API: