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

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.

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 :

  1. Defina o valor de runtime para 99

  2. Adicione Sports à array de genres somente se ela ainda não existir

  3. 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. 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:

  • UpdateOne

  • UpdateOptions

  • combine()

  • set()

  • addToSet()

  • currentDate()

  • UpdateResult

Voltar

Atualizar e substituir operações