Docs Menu
Docs Home

Actualiza varios documentos

Puede actualizar varios documentos utilizando el updateMany() 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 updateMany() método actualiza todos los documentos de la colección que coinciden con el filtro.

Para realizar una actualización con el método updateMany(), debe pasar un filtro de consulta y un documento de actualización. El filtro de consulta especifica los documentos de la colección que deben coincidir y el documento de actualización proporciona instrucciones sobre los cambios que deben realizarse.

Opcionalmente, puede pasar una instancia de UpdateOptions al método updateMany() para modificar el comportamiento de la llamada. Por ejemplo, si establece el campo upsert del objeto UpdateOptions en true y ningún documento coincide con el filtro de consulta especificado, la operación inserta un nuevo documento compuesto por los campos de la consulta y del documento de actualización.

Tras una ejecución correcta, el método updateMany() devuelve una instancia de UpdateResult. Puede recuperar información como el número de documentos modificados llamando al método getModifiedCount(). Si especificó upsert(true) en un objeto UpdateOptions y la operación resulta en una inserción, puede recuperar el campo _id del nuevo documento llamando al método getUpsertedId() en la instancia UpdateResult.

Si la operación de actualización falla, el controlador genera una excepción y no actualiza ninguno de los documentos que coinciden con el filtro. Por ejemplo, si intenta establecer un valor para el campo inmutable _id en su documento de actualización, el método updateMany() no actualiza ningún documento y genera 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 para updateMany(), cuyo enlace se encuentra en la parte inferior de esta página.

En este ejemplo, utilizamos un generador Filters para filtrar nuestra consulta de películas del género "Discutidas frecuentemente".

A continuación, actualizamos los documentos que coinciden con nuestra consulta en la colección movies de la base de datos sample_mflix. Realizamos las siguientes actualizaciones en los documentos coincidentes:

  • Agregue Frequently Discussed a la matriz de genres solo si aún no existe

  • Establezca el valor de lastUpdated en 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. Lea nuestro... Guía sobre Actualizaciones en la sección Constructores 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.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

Después de ejecutar el ejemplo, debería ver un resultado similar.

Si consulta el documento o los documentos actualizados, deberían verse así:

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

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

  • UpdateMany

  • UpdateOptions

  • combinar()

  • addToSet()

  • fechaActual()

  • UpdateResult