Overview
En esta guía, aprenderás a utilizar el controlador de Java Reactive Streams para actualizar documentos en una colección de MongoDB realizando operaciones de actualización.
Una operación de actualización actualiza uno o más documentos en una colección de MongoDB. Puede realizar una operación de actualización mediante el comando updateOne() o los métodos updateMany().
Datos de muestra
Los ejemplos en esta guía emplean la colección restaurants de la base de datos sample_restaurants en la Conjuntos de datos de muestra de Atlas.
Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta el Comenzar tutorial.
Importante
Proyecto Reactor librería
Esta guía utiliza la biblioteca Project Reactor para consumir Publisher las instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte la sección "Introducción" en la documentación de Reactor. Para obtener más información sobre cómo usamos los métodos de la biblioteca Project Reactor en esta guía, consulte la guía "Escribir datos en MongoDB".
Operaciones de actualizar
Puedes realizar operaciones de actualización en MongoDB utilizando los siguientes métodos:
updateOne(), que actualiza el primer documento que coincide con los criterios de búsquedaupdateMany(), que actualiza todos los documentos que coinciden con los criterios de búsqueda
Cada método de actualización requiere los siguientes parámetros:
El filtro de query de documento, que determina los documentos a actualizar. Para obtener más información sobre el uso de los filtros de query, consulta la sección Filtros.
Actualizar documento, que especifica el operador de actualización (el tipo de actualización a realizar) y los campos y valores a modificar. Para obtener más información sobre los operadores de actualización, consulte la sección Operadores de actualización.
Filtros
Cada método de actualización requiere un filtro de query, que especifica los criterios de búsqueda que determinan qué documentos seleccionar para actualizaciones. Para facilitar la creación de objetos de filtro, el driver proporciona la clase Filters que ofrece métodos asistentes para condiciones de filtro.
Para ver una lista de los Filters ayudantes, consulte la documentación de la API de filtros. Para obtener más información sobre los filtros de consulta, consulte la sección "Documentos de filtros de consulta" del manual de MongoDB Server.
Operadores de actualización
Para cambiar un campo en un documento, MongoDB proporciona operadores de actualización. Para especificar la modificación a realizar utilizando los operadores de actualización, crea un documento de actualización. Para facilitar la creación de documentos de actualización, el driver proporciona la clase asistente Updates que contiene métodos asistente de condiciones de filtro.
Importante
El campo _id es inmutable, por lo que no puedes cambiar el valor del campo _id en un documento.
Para obtener más información sobre los operadores de actualización, consulta Operadores de actualización en el manual del Servidor.
Actualizar un documento
Para actualizar un solo documento en una colección de MongoDB, llame al updateOne() método y pase los operadores de filtro y actualización de consulta. Luego, pase el updateOne() resultado al método estático Mono.from() Monodesde. Mono es una clase de la biblioteca Project Reactor. En Java Reactive Streams, los métodos del controlador devuelven Publisher instancias frías, lo que significa que la operación correspondiente no se realiza a menos que se suscriba a la instancia Publisher devuelta. Esta guía utiliza la biblioteca Project Reactor para consumirlas. Para obtener más información Mono sobre, consulte Mono en la documentación de Project Reactor.
El siguiente ejemplo utiliza el método updateOne() para actualizar el valor name de un documento coincidente de "Bagels N Buns" a "2 Bagels 2 Buns":
Publisher<UpdateResult> updatePublisher = restaurants.updateOne(eq("name", "Bagels N Buns"), set("name", "2 Bagels 2 Buns")); Mono.from(updatePublisher).block();
Actualiza varios documentos
Para actualizar varios documentos en una colección de MongoDB, llame al updateMany() método y pase los operadores de filtro y actualización de consulta. A continuación, pase el updateMany() resultado al método estático Mono.from() Monodesde. Mono es una clase de la biblioteca Project Reactor. En Java Reactive Streams, los métodos del controlador devuelven Publisher instancias frías, lo que significa que la operación correspondiente no se realiza a menos que se suscriba a la instancia Publisher devuelta. Esta guía utiliza la biblioteca Project Reactor para consumirlas. Para obtener más información Mono sobre, consulte Mono en la documentación de Project Reactor.
El siguiente ejemplo utiliza el método updateMany() para actualizar todos los documentos que tengan un valor cuisine de "Pizza" a un valor cuisine de "Pasta":
Publisher<UpdateResult> updatePublisher = restaurants.updateMany(eq("cuisine", "Pizza"), set("cuisine", "Pasta")); Mono.from(updatePublisher).block();
Personaliza la operación de actualizar
La clase UpdateOptions contiene métodos que modifican el comportamiento de los métodos de actualización. Para utilizar la clase UpdateOptions, crea una nueva instancia de la clase y luego llama a uno o más de sus métodos para modificar la operación de actualización. Puede encadenar estas llamadas de método juntas. Para modificar el comportamiento de la operación de actualización, pasa la instancia de la clase y las llamadas a los métodos encadenados como tercer argumento al método updateOne() o updateMany().
Puedes utilizar los siguientes métodos opcionales en la clase UpdateOptions para modificar una operación de actualización:
Método | Descripción |
|---|---|
| Specifies which array elements an update applies
to. |
| Specifies whether the update operation bypasses document validation. This lets you
update documents that don't meet the schema validation requirements, if any
exist. For more information about schema validation, see Schema
Validation in the MongoDB
Server manual. |
| Specifies the kind of language collation to use when sorting
results. For more information, see Collation
in the MongoDB Server manual. |
| Attaches a Bson comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
| Attaches a String comment to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
| Sets the index for the operation as a Bson value.
For more information, see the hint statement
in the MongoDB Server manual. |
| Sets the index for the operation as a String value.
For more information, see the hint statement
in the MongoDB Server manual. |
| Specifies a map of parameter names and values. Values must be constant or closed
expressions that don't reference document fields. For more information,
see the let statement in the
MongoDB Server manual. |
| Sets the sort criteria to apply to the operation. If multiple
documents match the query filter that you pass to the
updateOne() method, the operation updates the first
result. You can set this option to apply an order to matched
documents to have more control over which document is updated. |
| Specifies whether the update operation performs an upsert operation if no
documents match the query filter. For more information, see the upsert
statement
in the MongoDB Server manual. |
Ejemplo
El siguiente código utiliza el método updateMany() para encontrar todos los documentos donde el campo borough tiene el valor "Manhattan". Luego actualiza el valor borough en estos documentos a "Manhattan (north)". Debido a que la opción upsert está configurada en true, el driver Java Reactive Streams inserta un nuevo documento si el filtro de query no coincide con ningún documento existente.
Publisher<UpdateResult> updatePublisher = restaurants.updateMany( eq("borough", "Manhattan"), set("borough", "Manhattan (north)"), new UpdateOptions().upsert(true)); Mono.from(updatePublisher).block();
Valor de retorno
Los métodos updateOne() y updateMany() devuelven cada uno un objeto UpdateResult. El tipo UpdateResult contiene los siguientes métodos de instancia:
Método | Descripción |
|---|---|
| The number of documents that matched the query filter, regardless of
how many were updated. |
| The number of documents modified by the update operation. If an updated
document is identical to the original, it is not included in this
count. |
| The ID of the document that was upserted in the database, if the driver
performed an upsert. Otherwise null. |
| Returns true if the update was acknowledged. |
Información Adicional
Para obtener información adicional sobre los operadores de actualización, consultar Operadores de actualización en el manual de MongoDB Server.
Para ejemplos de código ejecutables de inserción de documentos con el driver Java Reactive Streams, consulte la guía Guardar datos en MongoDB.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: