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. Puedes realizar una operación de actualización usando los métodos updateOne() o updateMany().
Datos de muestra
Los ejemplos de esta guía utilizan la colección restaurants de la base de datos sample_restaurants en los 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, consulte el tutorial Primeros pasos .
Importante
Proyecto Reactor librería
Esta guía usa la librería Proyecto Reactor para consumir instancias Publisher devueltas por los métodos del driver Reactive Streams de Java. Para obtener más información sobre la biblioteca Project Reactor y cómo utilizarla, consulta Primeros pasos en la documentación de Reactor. Para obtener más información sobre cómo utilizamos los métodos de la librería Project Reactor en esta guía, consulta la guía Guardar 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.
filtro
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 Filters asistentes, consulte la Documentación API de Filtros. Para obtener más información sobre los filtros de query, puedes consultar la sección Documentos de filtros de query en el 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 único documento en una colección de MongoDB, llama al método updateOne() y pasa tu filtro de query y operadores de actualización. Luego, pase el resultado updateOne() al método estático Mono.from() de Mono. Mono es una clase de la librería Project Reactor. En los flujos reactivos de Java, los métodos del controlador devuelven instancias frías de Publisher, lo que significa que la operación correspondiente no ocurre a menos que te suscribas al Publisher devuelto. Esta guía utiliza la librería Project Reactor para consumirlos. Para aprender más acerca de Mono, consulta Mono en la documentación del Proyecto 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, llama al método updateMany() y pasa tu filtro de query y operadores de actualización. Luego, pase el resultado updateMany() al método estático Mono.from() de Mono. Mono es una clase de la librería Project Reactor. En los flujos reactivos de Java, los métodos del controlador devuelven instancias frías de Publisher, lo que significa que la operación correspondiente no ocurre a menos que te suscribas al Publisher devuelto. Esta guía utiliza la librería Project Reactor para consumirlos. Para aprender más acerca de Mono, consulta Mono en la documentación del Proyecto 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 |
|---|---|
| Especifica a qué elementos del arreglo se aplica una actualización. |
| Especifica si la operación de actualización omite la validación de documentos. Esto te permite actualizar documentos que no cumplen los requisitos de validación del esquema, si existieran. Para obtener más información sobre la validación de esquemas, consulta Validación de Esquemas en el manual de MongoDB Server. |
| Especifica el tipo de intercalación de lenguaje a usar al ordenar los resultados. Para obtener más información, consulte intercalación en el manual de MongoDB Server. |
| Adjunta un comentario |
| Adjunta un comentario |
| Establece el índice para la operación como un valor |
| Establece el índice para la operación como un valor |
| Especifica un mapa de nombres de parámetros y valores. Los valores deben ser constantes o expresiones cerradas que no hagan referencia a los campos del document. Para obtener más información, consulte la instrucción let en el manual de MongoDB Server. |
| Establece los criterios de ordenación que se aplicarán a la operación. Si varios documents coinciden con el filtro de query que se pasa al método |
| Especifica si la operación de actualizar realiza una operación de inserción si ningún documento coincide con el filtro de query. Para más información, consulta la instrucción de inserción en el manual del MongoDB Server. |
Ejemplo de inserción/actualización
Una operación upsert actualiza los documentos que coinciden con su filtro de consulta e inserta un nuevo documento si no hay coincidencias con su filtro de consulta.
El siguiente código utiliza el método updateMany() para encontrar todos los documentos donde el campo borough tenga el valor "Manhattan". A continuación, actualiza el valor borough en estos documentos a "Manhattan (north)". Dado que la opción upsert está configurada como true, el controlador Java Reactive Streams inserta un nuevo documento si el filtro de consulta no coincide con ningún documento existente. El ejemplo devuelve el número de documentos que coinciden con el filtro de consulta y el número de documentos modificados por la operación de inserción/actualización.
Bson filter = Filters.eq("borough", "Manhattan"); Bson update = Updates.set("borough", "Manhattan (north)"); UpdateOptions options = new UpdateOptions().upsert(true); Publisher<UpdateResult> updateManyPublisher = restaurants.updateMany(filter, update, options); UpdateResult result = Mono.from(updateManyPublisher).block(); System.out.println("Matched: " + result.getMatchedCount() + ", Modified: " + result.getModifiedCount() + ", Upserted ID: " + result.getUpsertedId());
Matched: 10259, Modified: 10259, Upserted ID: null
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 |
|---|---|
| El número de documentos que coincidieron con el filtro de query, independientemente de cuántos se actualizaron. |
| El número de documentos que han sido modificados durante la operación de actualización. Si un documento actualizado es idéntico al original, no se incluye en este recuento. |
| El ID del documento que se actualizó en la base de datos, si el driver realizó una inserción. De lo contrario, |
| Retorna verdadero si se reconoció la actualización. |
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 ver ejemplos de código ejecutables sobre cómo insertar documentos con el controlador Java Reactive Streams, consulte la guía de operaciones CRUD.
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: