Overview
En esta guía puedes aprender a utilizar el controlador de Java Reactive Streams para añadir documentos a una colección de MongoDB mediante la realización de operaciones de inserción.
Una operación de inserción inserta uno o más documentos en una colección de MongoDB. Puede realizar una operación de inserción utilizando la insertOne() o los métodos insertMany().
Datos de muestra
Los ejemplos en esta guía utilizan la colección sample_restaurants.restaurants de 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 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.
El campo _id
En una colección de MongoDB, cada documento debe contener un campo _id con un valor de campo único.
MongoDB permite gestionar este campo de dos formas:
Uno mismo puede configurar este campo para cada documento, asegurando que el valor de cada campo
_idsea único.Puede permitir que el controlador genere automáticamente valores únicos
ObjectIdpara cada documento_id. Si no estableces manualmente un valor de_idpara un documento, el controlador rellena el campo con unObjectId.
A menos que pueda garantizar la exclusividad, recomendamos dejar que el controlador genere automáticamente los valores de _id.
Nota
Los valores duplicados de _id violan las restricciones de índice único, lo que provoca que el controlador devuelva un WriteError de insertOne() o un BulkWriteError de insertMany().
Para obtener más información sobre el campo _id, consulta la guía Índices únicos en el manual del MongoDB Server.
Para obtener más información sobre la estructura y las reglas de los documentos, consulta la guía de Documentos en el manual de MongoDB Server.
Inserta un documento
Para agregar un solo documento a una colección de MongoDB, llame al método insertOne() y pase el documento que desea agregar. Luego, pase el resultado insertOne() 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 insertOne() para insertar un documento en el que el valor de name es "Mongo's
Burgers" en la colección restaurants:
Document document = new Document("name", "Mongo's Burgers"); Publisher<InsertOneResult> insertPublisher = restaurants.insertOne(document); Mono.from(insertPublisher).block();
Inserta varios documentos
Para agregar varios documentos a una colección de MongoDB, llama al método insertMany() y pasa una lista de los documentos que quieres agregar. Luego, pase el resultado insertMany() 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 insertMany() para insertar una lista de documentos en la colección restaurants:
Document doc1 = new Document("name", "Mongo's Pizza"); Document doc2 = new Document("name", "Mongo's Coffee"); List<Document> documents = Arrays.asList(doc1, doc2); Publisher<InsertManyResult> insertPublisher = restaurants.insertMany(documents); Mono.from(insertPublisher).block();
Modificar el comportamiento de inserción
La clase InsertOneOptions contiene métodos que modifican el comportamiento del método insertOne(). Para utilizar la clase InsertOneOptions, debes construir una nueva instancia de la clase y luego llamar a uno o más de sus métodos para modificar la operación de inserción. Puede encadenar estas llamadas de método juntas. Para modificar el comportamiento de la operación de inserción, pasa la instancia de la clase y las llamadas encadenadas de métodos como segundo argumento al método insertOne().
De manera similar, puedes modificar el método insertMany() usando la clase InsertManyOptions.
Se pueden emplear los siguientes métodos en la clase InsertOneOptions para modificar el método insertOne(). Todos los métodos son opcionales.
Método | Descripción |
|---|---|
| If set to True, allows the write to opt out of
document-level validation.Defaults to False. |
| If used, returns a string representation of the object. |
| A comment to attach to the operation. For more information, see the insert command
fields guide in the
MongoDB Server manual. |
La clase InsertManyOptions contiene los métodos anteriores, así como el siguiente método ordered():
Método | Descripción |
|---|---|
| If set to True, the driver sends documents to the
server in the order provided. If an error occurs, the driver
and server cancel all remaining insert operations.Defaults to True. |
Ejemplo
El siguiente código utiliza el método insertMany() para insertar nuevos documentos en la colección restaurants. También configura la opción bypassDocumentValidation(true) para omitir la validación a nivel de documento.
Document doc1 = new Document("name", "Mongo's Burgers"); Document doc2 = new Document("name", "Mongo's Pizza"); Document doc3 = new Document("name", "Mongo's Coffee"); List<Document> documents = Arrays.asList(doc1, doc2, doc3); Publisher<InsertManyResult> insertPublisher = restaurants.insertMany(documents, new InsertManyOptions().bypassDocumentValidation(true)); Mono.from(insertPublisher).block();
Información Adicional
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: