Overview
En esta guía, puede aprender a utilizar el controlador Java Reactive Streams para reemplazar un documento en una colección MongoDB realizando una operación de reemplazo.
Una operación de reemplazo reemplaza un documento en una colección de MongoDB con los nuevos campos y valores que usted especifique. Puede realizar una operación de reemplazo usando replaceOne() .
Datos de muestra
Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de Conjuntos de datos de muestra del Atlas.
Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte Tutorial de introducción.
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".
Operación de reemplazo
Puede realizar una operación de reemplazo usando el método replaceOne() en una instancia MongoCollection. Este método elimina todos los campos excepto el campo _id del primer documento que coincide con los criterios de búsqueda y, a continuación, añade los campos y valores especificados al documento vacío.
Parámetros requeridos
El método replaceOne() requiere los siguientes parámetros:
Documento defiltro de consulta, que determina qué documentos reemplazar. Para obtener más información sobre los filtros de consulta, consulte la guía "Especificar una consulta".
Reemplazar documento, que especifica los campos y valores a insertar en el nuevo documento.
Ejemplo de reemplazo
Para reemplazar un solo documento en una colección de MongoDB, llame al replaceOne() método y pase el documento de filtro de consulta y el documento de reemplazo como parámetros. Luego, pase el replaceOne() 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 al devuelto.Publisher 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 replaceOne() para reemplazar los campos y valores de un documento con un valor de campo name de "Pizza Town". El método replaceOne() reemplaza el documento original con un documento con un valor de campo name de "Mongo's Pizza" y un valor de campo cuisine de "Pizza".
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Pizza Town"), new Document().append("name", "Mongo's Pizza") .append("cuisine", "Pizza")); Mono.from(replacePublisher).block();
Modificar el comportamiento de reemplazo
Opcionalmente, puede modificar el comportamiento del método replaceOne() llamando a un método de opciones. La clase ReplaceOptions proporciona métodos que modifican el comportamiento del método replaceOne(). Para usar la clase ReplaceOptions, cree una nueva instancia de la clase y llame a uno o más de sus métodos para modificar la operación de reemplazo. Puede encadenar estas llamadas a métodos. Para modificar el comportamiento de la operación de reemplazo, pase la instancia de la clase y las llamadas a métodos encadenadas como último argumento del método replaceOne().
Puede utilizar los siguientes métodos en la clase ReplaceOptions para modificar el método replaceOne().
Método | Descripción |
|---|---|
| Specifies whether the replace 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 BsonValue 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
replaceOne() method, the operation replaces the first
result. You can set this option to apply an order to matched
documents to have more control over which document is replaced. |
| Specifies whether the replace 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 de modificación y reemplazo
El siguiente código utiliza el método replaceOne() para reemplazar un documento en la colección restaurants. También configura la opción upsert(true) para que el driver inserte un nuevo documento si el filtro de query no coincide con ningún documento existente.
Publisher<UpdateResult> replacePublisher = restaurants.replaceOne( eq("name", "Food Town"), new Document().append("name", "Food World") .append("cuisine", "Mixed"), new ReplaceOptions().upsert(true)); Mono.from(replacePublisher).block();
Valor de retorno
El método replaceOne() devuelve un objeto UpdateResult. Utilice los siguientes métodos del tipo UpdateResult para acceder a la información correspondiente:
Propiedad | Descripción |
|---|---|
| The number of documents that matched the query filter, regardless of
how many were replaced. |
| The number of documents modified by the replace operation. If a replaced
document is identical to the original, it is not included in this
count. |
| The ID of the document that was inserted into the database, if the driver
performed an upsert. If no document was inserted, this value is null. |
| An acknowledgement of the replacement. |
Información Adicional
Para obtener ejemplos de código ejecutable sobre cómo reemplazar documentos con el controlador Java Reactive Streams, consulte la guía Escribir 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: