Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home

Actualizar un documento

Puedes actualizar un solo documento utilizando el updateOne() método en un objeto MongoCollection. El método permite un filtro que coincide con el documento que desea actualizar y una instrucción de actualización que indica al driver cómo cambiar el documento coincidente. El método updateOne() solo actualiza el primer documento que reúne la condición del filtro.

Para realizar un actualizar con el método updateOne(), debes pasar un filtro de query y un documento de actualizar. El filtro de query especifica los criterios para el documento en el que se realizará la actualizar y el documento de actualizar proporciona instrucciones sobre qué cambios realizar en él.

Opcionalmente, puedes pasar una instancia de UpdateOptions al método updateOne() para especificar el comportamiento del método. Por ejemplo, si estableces el campo upsert del objeto UpdateOptions en true, la operación inserta un nuevo documento a partir de los campos en el documento de query y actualización si ningún documento coincide con el filtro de query. Consulta el enlace a la documentación de API UpdateOptions en la parte inferior de esta página para obtener más información.

Tras la ejecución correcta, el método updateOne() devuelve una instancia de UpdateResult. Puedes recuperar información, como el número de documentos modificados, llamando al método getModifiedCount(), o el valor del campo _id llamando al método getUpsertedId() si especificaste upsert(true) en una instancia UpdateOptions.

Si tu operación de actualizar falla, el driver genera una excepción. Por ejemplo, si intentas establecer un valor para el campo inmutable _id en tu documento de actualización, el método lanza un MongoWriteException con el mensaje:

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

Si el documento actualizado contiene un cambio que viola las reglas del índice único, el método lanza un MongoWriteException con un mensaje de error que debería verse algo así:

E11000 duplicate key error collection: ...

Si desea más información sobre los tipos de excepciones que se generan en condiciones específicas, consulte la documentación de la API de updateOne() vinculada al final de esta página.

En este ejemplo, se utiliza un desarrollador Filters para consultar la colección en busca de una película con el título "Cool Runnings 2".

A continuación, realizamos las siguientes actualizaciones en la primera coincidencia de nuestra query en la colección movies de la base de datos sample_mflix:

  1. Establezca el valor de runtime a 99

  2. Agrega Sports al arreglo de genres solo si aún no existe

  3. Establece el valor de lastUpdated a la hora actual

Utilizamos el generador Updates, una clase de fábrica que contiene métodos auxiliares estáticos, para construir el documento de actualización. Si bien se puede pasar un documento de actualización en lugar de utilizar el constructor, el constructor proporciona una verificación de tipo y una sintaxis simplificada. Consulta el guía sobre el Actualizador para obtener más información.

Nota

Este ejemplo se conecta a una instancia de MongoDB mediante un URI de conexión. Para saber más sobre cómo conectarse a su instancia de MongoDB, consulte la guía de conexión.

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()
}

Después de ejecutar el ejemplo, deberías ver una salida que se parezca a esto:

Modified document count: 1
Upserted id: null

O si el ejemplo dio lugar a una inserción:

Modified document count: 0
Upserted id: BsonObjectId{value=...}

Si query el documento actualizado, debería tener un aspecto similar a este:

Movie(title=Cool Runnings 2, runtime=99, genres=[ ... Sports], lastUpdated= ... )

Para obtener información adicional sobre las clases y métodos mencionados en esta página, revisa la siguiente documentación API:

  • UpdateOne

  • UpdateOptions

  • combinar()

  • set()

  • addToSet()

  • currentDate()

  • UpdateResult