Puede actualizar un solo documento utilizando el updateOne() Método en un MongoCollection objeto. El método acepta un filtro que coincide con el documento que desea actualizar y una instrucción de actualización que indica al controlador cómo cambiar el documento coincidente. El updateOne() método solo actualiza el primer documento que coincide con el filtro.
Para realizar una actualización con el método updateOne(), debe pasar un filtro de consulta y un documento de actualización. El filtro de consulta especifica los criterios para el documento en el que se realizará la actualización y el documento de actualización proporciona instrucciones sobre los cambios que se deben realizar.
Opcionalmente, puede pasar una instancia de UpdateOptions al método updateOne() para especificar su comportamiento. Por ejemplo, si establece el campo upsert del objeto UpdateOptions como true, la operación insertará un nuevo documento a partir de los campos de la consulta y del documento de actualización si ningún documento coincide con el filtro de consulta. Consulte el enlace a la documentación de la API UpdateOptions al final de esta página para obtener más información.
Tras una ejecución correcta, el método updateOne() devuelve una instancia de UpdateResult. Puede 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 especificó 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 su documento de actualización contiene un cambio que viola las reglas de índice único, el método arroja un MongoWriteException con un mensaje de error que debería verse así:
E11000 duplicate key error collection: ...
Para obtener más información sobre los tipos de excepciones generadas en condiciones específicas, consulte la documentación de la API updateOne() vinculada en la parte inferior de esta página.
Ejemplo
En este ejemplo, utilizamos un generador 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 a la primera coincidencia de nuestra consulta en la colección movies de la base de datos sample_mflix:
Establezca el valor de
runtimea99Agregue
Sportsa la matriz degenressolo si aún no existeEstablezca el valor de
lastUpdateden la hora actual
Usamos el constructor 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 usar el constructor, este proporciona verificación de tipos y una sintaxis simplificada. Consulte Guía sobre el generador de actualizaciones para obtener más información.
Nota
Este ejemplo se conecta a una instancia de MongoDB mediante una URI de conexión. Para obtener más información 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ía ver un resultado parecido a esto:
Modified document count: 1 Upserted id: null
O si el ejemplo resultó en una inserción y actualización:
Modified document count: 0 Upserted id: BsonObjectId{value=...}
Si consulta el documento actualizado, debería verse así:
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, consulte la siguiente documentación de API: