Overview
En esta guía, aprenderá cómo especificar actualizaciones utilizando constructores en el controlador Java Reactive Streams.
El generador Updates proporciona métodos asistentes para simplificar las siguientes tareas:
Actualizaciones de campo: Actualización o eliminación del valor de un campo en particular
Actualizaciones de arreglo: actualizando valores en un campo valorizado por un arreglo
Combinando operadores de actualizar múltiples: realizar varias actualizaciones a la vez, como establecer o cambiar más de un campo
Algunos métodos que esperan documentos de actualización son:
updateOne()updateMany()bulkWrite()
La Updates clase proporciona métodos de fábrica estáticos para todos los operadores de actualización de MongoDB. Cada método devuelve una instancia del tipo BSON, que se puede pasar a cualquier método que espere un argumento de actualización.
Tip
Para mayor brevedad, puede optar por importar los métodos de las clases Updates y Filters de forma estática:
import static com.mongodb.client.model.Updates.*; import static com.mongodb.client.model.Filters.*;
Los siguientes ejemplos asumen esta importación estática.
Los ejemplos de esta guía utilizan el siguiente documento:
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Actualizaciones de campo
Configura
Utiliza el método set() para asignar el valor de un campo en una operación de actualización.
El siguiente ejemplo establece el valor del campo qty en "11":
Bson filter = eq("_id", 1); Bson update = set("qty", 11); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 11, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
El siguiente ejemplo agrega dos nuevos campos al documento original:
Bson filter = eq("_id", 1); Bson update = combine(set("width", 6.5), set("height", 10)); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }, "width": 6.5, "height": 10 }
Sin establecer
Utiliza el método unset() para borrar el valor de un campo en una operación de actualización.
El siguiente ejemplo elimina el campo qty:
Bson filter = eq("_id", 1); Bson update = unset("qty"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Configurar al insertar
Utiliza el método setOnInsert() para asignar el valor de un campo en una operación de actualización durante la inserción de un documento.
El siguiente ejemplo establece el valor del campo qty en "7" si una operación upsert resultó en la inserción de un documento:
Bson filter = eq("_id", 1); Bson update = setOnInsert("qty", 7); Publisher<UpdateResult> result = collection.updateOne(filter, update, new UpdateOptions().upsert(true)); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 7, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Nota
Si el documento no se inserta, no se producirá ningún cambio.
Incremento
Usa el inc() método para incrementar el valor de un campo numérico en una operación de actualización.
El siguiente ejemplo incrementa el valor del campo qty en "3":
Bson filter = eq("_id", 1); Bson update = inc("qty", 3); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Multiplicar
Utiliza el método mul() para multiplicar el valor de un campo numérico en una operación de actualización.
En el siguiente ejemplo se multiplica el valor del campo qty por "2":
Bson filter = eq("_id", 1); Bson update = mul("qty", 2); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 10, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
renombrar
Utiliza el método rename() para cambiar el valor de un campo en una operación de actualización.
El siguiente ejemplo cambia el nombre del campo qty a \"quantity\":
Bson filter = eq("_id", 1); Bson update = rename("qty", "quantity"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" }, "quantity": 5 }
Min
Utiliza el método min() para actualizar el valor de un campo con el número menor de los dos especificados en una operación de actualización.
El siguiente ejemplo establece el valor del campo qty al mínimo entre su valor actual y "2":
Bson filter = eq("_id", 1); Bson update = min("qty", 2); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 2, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
máximo
Utilice el método max() para actualizar el valor de un campo con el número mayor de los dos especificados en una operación de actualización.
El siguiente ejemplo establece el valor del campo qty al máximo de su valor actual y "8":
Bson filter = eq("_id", 1); Bson update = max("qty", 8); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 8, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Fecha actual
Utilizar el método currentDate() para asignar a un campo el valor de la fecha actual en una operación de actualización como fecha BSON.
El siguiente ejemplo configura el valor del campo lastModified a la fecha actual como una fecha BSON:
Bson filter = eq("_id", 1); Bson update = currentDate("lastModified"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-22T21:01:20.027Z" } }
Marca de tiempo actual
Utiliza el método currentTimestamp() para asignar el valor de un campo en una operación de actualización a la fecha actual, como un timestamp.
El siguiente ejemplo establece el valor del campo lastModified a la fecha actual como una marca de tiempo BSON:
Bson filter = eq("_id", 1); Bson update = currentTimestamp("lastModified"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M" ], "lastModified": { "$timestamp": { "t": 1616446880, "i": 5 } } }
Bit
Usa los bitwiseOr(), bitwiseAnd() y bitwiseXor() métodos para realizar una actualización bit a bit del valor entero de un campo en una operación de actualización.
El siguiente ejemplo realiza un OR bit a bit entre el número «10» y el valor entero del campo qty:
Bson filter = eq("_id", 1); Bson update = bitwiseOr("qty", 10); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
La operación a nivel de bits da como resultado 15:
0101 // 5 in binary 1010 // 10 in binary ---- 1111 // 15 in binary
El ejemplo precedente actualiza el documento original al siguiente estado:
{ "_id": 1, "color": "red", "qty": 15, "vendor": [ "A", "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Array Updates
Añadir al conjunto
Utiliza el método addToSet() para añadir un valor a un arreglo si el valor no está ya presente en una operación de actualización.
El siguiente ejemplo añade el valor "C" al valor de arreglo del campo vendor:
Bson filter = eq("_id", 1); Bson update = addToSet("vendor", "C"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Pop
Utiliza el método popFirst() para remover el primer elemento de un arreglo y el método popLast() para remover el último elemento de un arreglo en una operación de actualización.
El siguiente ejemplo muestra el primer elemento del valor del arreglo del campo vendor:
Bson filter = eq("_id", 1); Bson update = popFirst("vendor"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Extraer todo
Utiliza el pullAll() método para remover todas las instancias de valores de un arreglo existente en una operación de actualizar.
El siguiente ejemplo remueve a los proveedores "A" y "M" del arreglo vendor:
Bson filter = eq("_id", 1); Bson update = pullAll("vendor", Arrays.asList("A", "M")); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "D" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Tirar
Utilice el método pull() para remover todas las instancias de un valor de un arreglo existente en una operación de actualización.
El siguiente ejemplo elimina el valor "D" del arreglo vendor:
Bson filter = eq("_id", 1); Bson update = pull("vendor", "D"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "M" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Push
Utilice el método push() para agregar un valor a un arreglo en una operación de actualización.
Los siguientes ejemplos agregan "C" al arreglo vendor:
Bson filter = eq("_id", 1); Bson update = push("vendor", "C"); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "red", "qty": 5, "vendor": [ "A", "D", "M", "C" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }
Combinando múltiples operadores de actualización
Una aplicación puede actualizar varios campos de un solo documento combinando dos o más de los operadores de actualización descritos en las secciones anteriores.
El siguiente ejemplo incrementa el valor del campo qty por “6”, establece el valor del campo color en “púrpura” y empuja “R” al campo vendor:
Bson filter = eq("_id", 1); Bson update = combine(set("color", "purple"), inc("qty", 6), push("vendor", "R")); Publisher<UpdateResult> result = collection.updateOne(filter, update); Mono.from(result).block();
{ "_id": 1, "color": "purple", "qty": 11, "vendor": [ "A", "D", "M", "R" ], "lastModified": { "$date": "2021-03-05T05:00:00Z" } }