Overview
En esta guía, puedes aprender cómo insertar documentos con el controlador Java de MongoDB.
Puede utilizar MongoDB para recuperar, actualizar y borrar información. Para realizar cualquiera de esas operaciones, esa información, como los perfiles de usuario y los pedidos, debe existir en MongoDB. Para que exista esa información, primero se debe ejecutar una operación de inserción.
Una operación de inserción inserta uno o varios documentos en MongoDB utilizando el insertOne(), insertMany(), y bulkWrite() métodos.
Las siguientes secciones se centran en insertOne() y insertMany(). Para obtener información sobre cómo usar el método bulkWrite(), consulte nuestra
Guía sobre Operaciones a Granel.
Nota
El campo id_ en las operaciones de inserción
Al insertar un documento, MongoDB aplica una restricción por defecto: cada documento debe contener un _id valor único. Los _id valores duplicados infringen las restricciones de índice único, lo que genera un WriteError valor.
Existen dos maneras de gestionar este campo:
El mismo usuario puede gestionar este campo y asegurarse de que cada valor que use sea único.
Puede dejar que el controlador genere automáticamente valores ObjectId únicos.
A menos que hayas proporcionado garantías sólidas de singularidad, recomendamos que dejes que el controlador genere automáticamente valores de _id.
Para obtener más información sobre los índices únicos, consulte la entrada del manual sobre Unique Indexes.
Inserta un solo documento
Utilice el método insertOne() cuando desee insertar un solo documento.
Tras una inserción exitosa, el método devuelve una instancia de InsertOneResult que representa el _id del nuevo documento.
Ejemplo
El siguiente ejemplo crea e inserta un documento utilizando el método insertOne():
Document doc1 = new Document("color", "red").append("qty", 5); InsertOneResult result = collection.insertOne(doc1); System.out.println("Inserted a document with the following id: " + result.getInsertedId().asObjectId().getValue());
La salida del código anterior se parece a la siguiente:
Inserted a document with the following id: 60930c39a982931c20ef6cd6
Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte los siguientes recursos:
insertOne() Documentación de la API
InsertOneResult Documentación de la API
Explicación manual sobre insertOne()
Ejemplo ejecutable de documento Insertar un ejemplo de documento
Inserta varios documentos
Utiliza el método insertMany() cuando desees insertar varios documentos. Este método inserta documentos en el orden especificado hasta que ocurra una excepción, si es que hay alguna.
Por ejemplo, suponga que desea insertar los siguientes documentos:
{ "_id": 3, "color": "red", "qty": 5 } { "_id": 4, "color": "purple", "qty": 10 } { "_id": 3, "color": "yellow", "qty": 3 } { "_id": 6, "color": "blue", "qty": 8 }
Si intentas insertar estos documentos, se produce un WriteError en el tercer documento y los documentos anteriores al error se insertan en tu colección.
Tip
Utilice un bloque try-catch para obtener una confirmación de los documentos procesados con éxito antes de que ocurra el error:
List<Integer> insertedIds = new ArrayList<>(); // Inserts sample documents and prints their "_id" values try { InsertManyResult result = collection.insertMany(documents); result.getInsertedIds().values() .forEach(doc -> insertedIds.add(doc.asInt32().getValue())); System.out.println("Inserted documents with the following ids: " + insertedIds); // Prints a message if any exceptions occur during the operation and the "_id" values of inserted documents } catch(MongoBulkWriteException exception) { exception.getWriteResult().getInserts() .forEach(doc -> insertedIds.add(doc.getId().asInt32().getValue())); System.out.println("A MongoBulkWriteException occurred, but there are " + "successfully processed documents with the following ids: " + insertedIds); }
La salida consiste en documentos que MongoDB puede procesar y debería verse como la siguiente:
A MongoBulkWriteException occurred, but there are successfully processed documents with the following ids: [3, 4, 6]
Si miras dentro de tu colección, deberías ver los siguientes documentos:
{ "_id": 3, "color": "red", "qty": 5 } { "_id": 4, "color": "purple", "qty": 10 }
En caso de inserción exitosa, el método devuelve una instancia de InsertManyResult que representa el _id de cada documento nuevo.
Ejemplo
El siguiente ejemplo crea y añade dos documentos a un List, e inserta el List utilizando el método insertMany():
List<Document> documents = new ArrayList<>(); Document doc1 = new Document("color", "red").append("qty", 5); Document doc2 = new Document("color", "purple").append("qty", 10); documents.add(doc1); documents.add(doc2); InsertManyResult result = collection.insertMany(documents); // Retrieves and prints the ID values of each inserted document List<ObjectId> insertedIds = new ArrayList<>(); result.getInsertedIds().values() .forEach(doc -> insertedIds.add(doc.asObjectId().getValue())); System.out.println("Inserted documents with the following ids: " + insertedIds);
La salida del código anterior se parece a la siguiente:
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
Insertar ejemplo: archivo completo
Nota
Configuración de ejemplo
Este ejemplo se conecta a una instancia de MongoDB mediante un URI de conexión. Para obtener más información sobre cómo conectarse a su instancia de MongoDB, consulte la guía Crear un MongoClient. Este ejemplo también utiliza la colección movies en la base de datos sample_mflix incluida en los conjuntos de datos de muestra de Atlas. Puede cargarlos en su base de datos en el nivel gratuito de MongoDB Atlas siguiendo el MongoDB Comenzar.
El siguiente código es un archivo completo e independiente que realiza una operación de inserción uno y una operación de inserción múltiple:
// Inserts a sample document describing a movie by using the Java driver package org.example; import java.util.Arrays; import org.bson.Document; import org.bson.types.ObjectId; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.InsertOneResult; import com.mongodb.client.result.InsertManyResult; import java.util.List; public class Insert { public static void main(String[] args) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); // Inserts a sample document describing a movie into the collection InsertOneResult result = collection.insertOne(new Document() .append("_id", new ObjectId()) .append("title", "Ski Bloopers") .append("genres", Arrays.asList("Documentary", "Comedy"))); // Prints the ID of the inserted document System.out.println("Inserted document id - insert one: " + result.getInsertedId()); // Creates two sample documents containing a "title" field List<Document> movieList = Arrays.asList( new Document().append("title", "Short Circuit 3"), new Document().append("title", "The Lego Frozen Movie")); // Inserts sample documents describing movies into the collection InsertManyResult result = collection.insertMany(movieList); // Prints the IDs of the inserted documents System.out.println("Inserted document id - insert many: " + result.getInsertedIds()); } } }
insertOne() document id: BsonObjectId{value=...} insertMany() document ids: {0=BsonObjectId{value=...}, 1=BsonObjectId{value=...}}
Solución de problemas
Excepción de escritura
El controlador genera una MongoWriteException ante cualquier error de escritura que se produzca al realizar operaciones de escritura únicas. Un MongoWriteException objeto tiene un error campo que contiene el WriteError objeto que lo causó.
Considere una colección que tiene una regla de validación de esquema donde el valor del campo quantity debe ser del tipo int. En el siguiente ejemplo, el driver arroja un MongoWriteException si intentas insertar un documento donde el valor de quantity es "three".
Exception in thread "main" com.mongodb.MongoWriteException: Document failed validation at com.mongodb.internal.connection.ProtocolHelper.getWriteException(ProtocolHelper.java:228) ... Caused by: com.mongodb.MongoWriteException: WriteError{code=121, message='Document failed validation', details={ operator: "$jsonSchema", schemaRules: { bsonType: "int", description: "must be an integer" }, offendingDocument: {"name":"Apple","quantity":"three"} } } at com.mongodb.internal.connection.WriteResultHelper.createWriteException(WriteResultHelper.java:50)
Para obtener más información sobre la validación del esquema, consulte Validación del esquema en la sección Entradas del manual del servidor.
Información Adicional
Documentación de la API
Para obtener más información sobre los métodos y clases utilizados para insertar documentos, consulta la siguiente documentación de la API:
Para obtener más información sobre los tipos de errores analizados en la sección Solución de problemas, consulte la siguiente documentación de API: