Docs Menu
Docs Home
/ /

Operaciones de inserción

En esta guía, puede aprender cómo insertar documentos con el controlador Java de MongoDB.

Puede usar MongoDB para recuperar, actualizar y eliminar información. Para realizar cualquiera de estas operaciones, dicha información, como perfiles de usuario y pedidos, debe existir en MongoDB. Para ello, primero realice 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 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 índices únicos, consulte la entrada del manual sobre Unique Indexes.

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.

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:

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 intenta insertar estos documentos, aparece un WriteError en el tercer documento y los documentos anteriores al error se insertan en su 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 consta de documentos que MongoDB puede procesar y debería verse así:

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 }

Tras una inserción exitosa, el método devuelve una instancia InsertManyResult que representa el _id de cada nuevo documento.

El siguiente ejemplo crea y agrega 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]

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB mediante una 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 movies colección de la sample_mflix base de datos incluida en los conjuntos de datos de ejemplo de Atlas. Puede cargarlos en su base de datos en la versión gratuita de MongoDB Atlas siguiendo la guía "Empezar a usar MongoDB".

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=...}}

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 con una regla de validación de esquema donde el valor del campo quantity debe ser de tipo int. En el siguiente ejemplo, el controlador genera un error MongoWriteException si intenta insertar un documento cuyo 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.

Para obtener más información sobre los métodos y clases utilizados para insertar documentos, consulte la siguiente documentación de 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:

Volver

Bases de datos y colecciones

En esta página