Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Operaciones de escritura masiva

En esta guía, puede aprender a utilizar operaciones masivas en el controlador Java.

Para realizar una sola operación de creación, reemplazo, actualizar o borrar, puedes usar el método correspondiente. Por ejemplo, para insertar un documento y reemplazar un documento, puedes usar el insertOne() y replaceOne() métodos. Cuando utilizes estos métodos, tu cliente realizará una llamada a la base de datos por cada operación.

Al utilizar una operación de guardar masiva, puedes realizar múltiples operaciones de guardar en menos llamadas a la base de datos. Puedes realizar operaciones de guardar en bloque en los siguientes niveles:

  • Colección: Puede usar el método MongoCollection.bulkWrite() para realizar operaciones de guardar en lote en una sola colección. En este método, cada tipo de operación de escritura requiere al menos una llamada a la base de datos. Por ejemplo, MongoCollection.bulkWrite() realiza múltiples operaciones de actualización en una sola llamada, pero hace dos llamadas separadas a la base de datos para una operación de inserción y una operación de reemplazo.

  • Cliente: Si tu aplicación se conecta a MongoDB Server versión 8.0 o posterior, puedes usar el método MongoClient.bulkWrite() para realizar operaciones de escritura masiva en múltiples colecciones y bases de datos dentro del mismo clúster. Este método realiza todas las operaciones de guardar en una sola llamada a la base de datos.

Las operaciones de escritura en bloque contienen una o más operaciones de escritura. Para realizar una operación de guardar masiva a nivel de colección, pasa un List de WriteModel documentos al método MongoCollection.bulkWrite(). Un WriteModel es un modelo que representa una operación de escritura.

El método MongoCollection.bulkWrite() realiza cada tipo de operación de guardar en una llamada separada a la base de datos. Por ejemplo, cuando se pasan los objetos DeleteOneModel, DeleteManyModel y ReplaceOneModel al método, este realiza dos llamadas: una para las operaciones de eliminación y otra para la operación de reemplazo.

Nota

Cuando el cliente divide las operaciones en llamadas de base de datos separadas, podría reordenar las operaciones para optimizar la eficiencia si la operación de guardado masivo no está ordenada. Para aprender más sobre el orden de ejecución de operaciones, consulte la sección Orden de Ejecución.

Las siguientes secciones muestran cómo crear y usar cada documento WriteModel. Los ejemplos de cada sección utilizan los siguientes documentos de la colección people:

{ "_id": 1, "name": "Karen Sandoval", "age": 31 }
{ "_id": 2, "name": "William Chin", "age": 54 }
{ "_id": 8, "name": "Shayla Ray", "age": 20 }

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de API:

Para llevar a cabo una operación de inserción, crea un InsertOneModel especificando el documento que deseas insertar. Para insertar varios documentos, debe crear un InsertOneModel para cada documento que desee insertar.

El siguiente ejemplo crea un InsertOneModel para dos documentos que describen a personas:

InsertOneModel<Document> juneDoc = new InsertOneModel<>(new Document("name", "June Carrie")
.append("age", 17));
InsertOneModel<Document> kevinDoc = new InsertOneModel<>(new Document("name", "Kevin Moss")
.append("age", 22));

Importante

Al efectuar un bulkWrite(), el InsertOneModel no puede insertar un documento con un _id que ya existe en la colección. En su lugar, el método lanza un MongoBulkWriteException.

El siguiente ejemplo intenta insertar dos documentos donde _id es 1 y 3:

try {
List<WriteModel<Document>> bulkOperations = new ArrayList<>();
// Creates instructions to insert documents
InsertOneModel<Document> doc1 = new InsertOneModel<>(new Document("_id", 1));
InsertOneModel<Document> doc3 = new InsertOneModel<>(new Document("_id", 3));
bulkOperations.add(doc1);
bulkOperations.add(doc3);
// Runs a bulk write operation for the specified insert WriteModels
collection.bulkWrite(bulkOperations);
// Prints a message if any exceptions occur during the bulk write operation
} catch (MongoBulkWriteException e){
System.out.println("A MongoBulkWriteException occurred with the following message: " + e.getMessage());
}

A continuación se muestra el resultado del código anterior:

A MongoBulkWriteException occurred with the following message:
Bulk write operation error on server sample-shard-00-02.pw0q4.mongodb.net:27017.
Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key
error collection: crudOps.bulkWrite index: _id_ dup key: { _id: 1 }', details={}}].

Para ver por qué el documento con el _id de 3 no se insertó, consulta la sección Orden de Ejecución.

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulta la InsertOneModel documentación de la API.

Para realizar una operación de reemplazo, crea un ReplaceOneModel especificando un filtro de query para el documento que deseas reemplazar con el documento de reemplazo.

Importante

Al realizar un bulkWrite(), el ReplaceOneModel no puede realizar cambios en un documento que violen los límites de índice único en la colección, y el modelo no reemplaza un documento si no hay coincidencias con tu filtro de query.

El siguiente ejemplo crea un ReplaceOneModel para reemplazar un documento cuyo _id es 1 con un documento que contiene un campo adicional location:

ReplaceOneModel<Document> celineDoc = new ReplaceOneModel<>(
Filters.eq("_id", 1),
new Document("name", "Celine Stork")
.append("location", "San Diego, CA"));

Si varios documentos coinciden con el filtro de query especificado en la instancia ReplaceOneModel, la operación reemplaza el primer resultado. Puedes especificar una medida en una instancia ReplaceOptions para aplicar un orden a los documentos coincidentes antes de que el servidor realice la operación de reemplazo, como se muestra en el siguiente código:

ReplaceOptions options = ReplaceOptions.sort(Sorts.ascending("_id"));

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte los siguientes recursos:

Para realizar una operación de actualización, crea un UpdateOneModel o un UpdateManyModel especificando un filtro de query para los documentos que deseas actualizar con los detalles de las actualizaciones.

UpdateOneModel actualiza el primer documento que coincide con su filtro de consulta y UpdateManyModel actualiza todos los documentos que coinciden con su filtro de consulta.

Importante

Al ejecutar un bulkWrite(), UpdateOneModel y UpdateManyModel no pueden realizar cambios en un documento que violen las restricciones de índice único en la colección, y los modelos no actualizan ningún documento si no hay coincidencias con su filtro de consulta.

El siguiente ejemplo crea un UpdateOneModel para actualizar el campo age en un documento donde el _id es 2:

UpdateOneModel<Document> updateDoc = new UpdateOneModel<>(
Filters.eq("_id", 2),
Updates.set("age", 31));

Si varios documentos coinciden con el filtro de query especificado en la instancia UpdateOneModel, la operación actualiza el primer resultado. Puedes especificar un ordenamiento en una instancia UpdateOptions para aplicar un orden a los documentos coincidentes antes de que el servidor realice la operación de actualización, como se muestra en el siguiente código:

UpdateOptions options = UpdateOptions.sort(Sorts.ascending("_id"));

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte los siguientes recursos:

Para realizar una operación de borrado, cree un DeleteOneModel o un DeleteManyModel especificando un filtro de query para los documentos que desea borrar.

DeleteOneModel elimina el primer documento que coincide con su filtro de consulta y DeleteManyModel elimina todos los documentos que coinciden con su filtro de consulta.

Importante

Al realizar un bulkWrite(), el DeleteOneModel y el DeleteManyModel no eliminarán ningún documento si no hay coincidencias con su filtro de query.

El siguiente ejemplo crea un DeleteOneModel para eliminar un documento donde el _id es 1:

DeleteOneModel<Document> deleteDoc = new DeleteOneModel<>(Filters.eq("_id", 1));

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de API:

El método bulkWrite() acepta un BulkWriteOptions opcional como segundo parámetro para especificar si la ejecución de las operaciones masivas está ordenada o no.

Por defecto, el método bulkWrite() ejecuta operaciones masivas en orden. Esto significa que las operaciones de procesamiento por lotes se ejecutan en el orden en que las agregó a la lista hasta que se produzca un error, si lo hay.

El siguiente ejemplo realiza estas operaciones masivas:

  • Una operación que inserta un documento con un valor name de "Zaynab Omar" y un valor age de 37

  • Una operación que reemplaza el documento donde _id es 1 con un nuevo documento que contiene el campo location

  • Una operación que actualiza el documento con un valor name de "Zaynab Omar" y cambia el name a "Zaynab Hassan"

  • Una operación que elimina todos los documentos donde el valor age es mayor que 50

List<WriteModel<Document>> bulkOperations = new ArrayList<>();
// Creates instructions to insert a document
InsertOneModel<Document> insertDoc = new InsertOneModel<>(new Document("_id", 6)
.append("name", "Zaynab Omar")
.append("age", 37));
// Creates instructions to replace the first document matched by the query
ReplaceOneModel<Document> replaceDoc = new ReplaceOneModel<>(Filters.eq("_id", 1),
new Document("name", "Sandy Kane")
.append("location", "Helena, MT"));
// Creates instructions to update the first document matched by the query
UpdateOneModel<Document> updateDoc = new UpdateOneModel<>(Filters.eq("name", "Zaynab Omar"),
Updates.set("name", "Zaynab Hassan"));
// Creates instructions to delete all documents matched by the query
DeleteManyModel<Document> deleteDoc = new DeleteManyModel<>(Filters.gt("age", 50));
bulkOperations.add(insertDoc);
bulkOperations.add(replaceDoc);
bulkOperations.add(updateDoc);
bulkOperations.add(deleteDoc);
// Runs a bulk write operation for the specified the insert, replace, update, and delete WriteModels in order
collection.bulkWrite(bulkOperations);

Después de ejecutar este ejemplo, su colección contendrá el siguiente documento:

{ "_id": 1, "name": "Sandy Kane", "location": "Helena, MT" }
{ "_id": 8, "name": "Shayla Ray", "age": 20 }
{ "_id": 6, "name": "Zaynab Hassan", "age": 37 }

También puedes ejecutar operaciones masivas en cualquier orden especificando "false" en el método order() en BulkWriteOptions. Esto significa que todas las operaciones de guardar se ejecutan independientemente de los errores y, si se produce algún error, la operación masiva los informa al final.

Agregando al ejemplo anterior, incluir lo siguiente especifica las operaciones masivas a ejecutar en cualquier orden:

BulkWriteOptions options = new BulkWriteOptions().ordered(false);
// Runs a bulk write operation for the specified insert, replace, update, and delete WriteModels in any order
collection.bulkWrite(bulkOperations, options);

Nota

Las operaciones masivas no ordenadas no ofrecen garantías del orden de ejecución. El orden puede diferir de la manera en que los enumeras para optimizar el tiempo de ejecución.

En el ejemplo precedente, si el método bulkWrite() decide realizar la operación de inserción después de la operación de actualización, nada cambia con la operación de actualización porque el documento no existe en ese punto en el tiempo. Luego, tu colección contendrá los siguientes documentos:

{ "_id": 1, "name": "Sandy Kane", "location": "Helena, MT" }
{ "_id": 8, "name": "Shayla Ray", "age": 20 }
{ "_id": 6, "name": "Zaynab Omar", "age": 37 }

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulte la siguiente documentación de API:

Nota

Configuración de ejemplo

Este ejemplo se conecta a una instancia de MongoDB utilizando un URI de conexión. Para obtener más información sobre cómo conectarse a tu instancia de MongoDB, consulta el Crea un MongoClient guía. 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. Puedes cargarlos en tu base de datos en el nivel gratuito de MongoDB Atlas siguiendo MongoDB Empezar.

El siguiente código es un archivo completo y autónomo que realiza las siguientes acciones:

  1. Crea una lista de instancias de las clases InsertOneModel, UpdateOneModel, DeleteOneModel y ReplaceOneModel.

  2. Ejecuta una operación bulkWrite() ordenada que realiza las escrituras especificadas en la lista de modelos.

// Runs bulk write operations on a collection by using the Java driver
package org.example;
import java.util.Arrays;
import org.bson.Document;
import com.mongodb.MongoException;
import com.mongodb.bulk.BulkWriteResult;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.UpdateOptions;
public class BulkWrite {
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");
// Runs a bulk write operation for the specified insert, update, delete, and replace operations
BulkWriteResult result = collection.bulkWrite(
Arrays.asList(
new InsertOneModel<>(new Document("name", "A Sample Movie")),
new InsertOneModel<>(new Document("name", "Another Sample Movie")),
new InsertOneModel<>(new Document("name", "Yet Another Sample Movie")),
new UpdateOneModel<>(new Document("name", "A Sample Movie"),
new Document("$set", new Document("name", "An Old Sample Movie")),
new UpdateOptions().upsert(true)),
new DeleteOneModel<>(new Document("name", "Yet Another Sample Movie")),
new ReplaceOneModel<>(new Document("name", "Yet Another Sample Movie"),
new Document("name", "The Other Sample Movie").append("runtime", "42"))
));
// Prints the number of inserted, updated, and deleted documents
System.out.println("Result statistics:" +
"\ninserted: " + result.getInsertedCount() +
"\nupdated: " + result.getModifiedCount() +
"\ndeleted: " + result.getDeletedCount());
}
}
}
Result statistics:
inserted: 3
updated: 2
deleted: 1

Al conectarse a una implementación con MongoDB Server 8.0 o posterior, puede usar el método MongoClient.bulkWrite() para escribir en varias bases de datos y colecciones del mismo clúster. El método MongoClient.bulkWrite() realiza todas las operaciones de escritura en una sola llamada.

El método MongoClient.bulkWrite() toma una lista de instancias ClientNamespacedWriteModel para representar diferentes operaciones de escritura. Puedes construir instancias de la interfaz ClientNamespacedWriteModel utilizando métodos de instancia. Por ejemplo, una instancia de ClientNamespacedInsertOneModel representa una operación para insertar un documento, y puedes crear este modelo utilizando el método ClientNamespacedWriteModel.insertOne().

Nota

Errores de guardado masivo

Si cualquiera de las operaciones de escritura falla, el driver genera un ClientBulkWriteException y no realiza ninguna otra operación individual. ClientBulkWriteException incluye un BulkWriteError al cual se puede acceder utilizando el método ClientBulkWriteException.getWriteErrors(), que proporciona detalles de la falla individual.

Los modelos y sus correspondientes métodos de instancia se describen en la siguiente tabla.

Modelo
Método de instancia
Descripción
Parámetros

ClientNamespacedInsertOneModel

insertOne()

Crea un modelo para insertar un documento en namespace.

namespace: Base de datos y colección para guardar

document: Documento para insertar

ClientNamespacedUpdateOneModel

updateOne()

Crea un modelo para actualizar el primer documento en el namespace que coincida con filter.

namespace: Base de datos y colección para guardar

filter: filtro que selecciona el documento a actualizar

update: Actualizar para aplicar al documento coincidente

updatePipeline:Actualizar canalización para aplicar al documento coincidente

options: (opcional) Opciones a aplicar al actualizar el documento

Debe pasar un valor para el parámetro update o updatePipeline.

ClientNamespacedUpdateManyModel

updateMany()

Crea un modelo para actualizar todos los documentos en el namespace que coincidan con filter.

namespace: Base de datos y colección para guardar

filterFiltro que selecciona los documentos que se van a actualizar

update: Actualización para aplicar a los documentos coincidentes

updatePipeline: Actualizar el pipeline para aplicarlo a documentos coincidentes

options: (opcional) Opciones a aplicar cuando se actualicen los documentos

Debe pasar un valor para el parámetro update o updatePipeline.

ClientNamespacedReplaceOneModel

replaceOne()

Crea un modelo para reemplazar el primer documento en namespace que coincide con filter.

namespace: Base de datos y colección para guardar

filterFiltro que selecciona el documento a reemplazar

replacementDocumento de sustitución

options: (opcional) Opciones a aplicar al reemplazar documentos

ClientNamespacedDeleteOneModel

deleteOne()

Crea un modelo para borrar el primer documento en namespace que coincida con filter.

namespace: Base de datos y colección para guardar

filter:Filtro que selecciona qué documento eliminar

option: (opcional) Opciones para aplicar al borrar un documento

ClientNamespacedDeleteManyModel

deleteMany()

Crea un modelo para eliminar todos los documentos en namespace que coincidan con filter.

namespace: Base de datos y colección para guardar

filter: Filtro que selecciona qué documentos borrar

option: (opcional) Opciones que pueden aplicarse al borrar documentos

Las siguientes secciones proporcionan ejemplos de cómo utilizar el método de cliente bulkWrite().

Para obtener más información sobre los métodos y clases mencionados en esta sección, consulta la siguiente documentación de la API:

Este ejemplo muestra cómo usar el método bulkWrite() para insertar dos documentos. Un documento se inserta en la colección db.people y el otro en la colección db.things. La instancia MongoNamespace define las bases de datos y colecciones a las que se aplica cada operación de escritura.

MongoNamespace peopleNamespace = new MongoNamespace("db", "people");
MongoNamespace thingsNamespace = new MongoNamespace("db", "things");
List<ClientNamespacedWriteModel> bulkOperations = new ArrayList<>();
bulkOperations.add(ClientNamespacedWriteModel
.insertOne(
peopleNamespace,
new Document("name", "Julia Smith")
)
);
bulkOperations.add(ClientNamespacedWriteModel
.insertOne(
thingsNamespace,
new Document("object", "washing machine")
)
);
ClientBulkWriteResult result = mongoClient.bulkWrite(bulkOperations);

El siguiente ejemplo muestra cómo utilizar el método bulkWrite() para actualizar documentos existentes en las colecciones db.people y db.things:

MongoNamespace peopleNamespace = new MongoNamespace("db", "people");
MongoNamespace thingsNamespace = new MongoNamespace("db", "things");
List<ClientNamespacedWriteModel> bulkOperations = new ArrayList<>();
bulkOperations.add(ClientNamespacedWriteModel.updateOne(
peopleNamespace,
Filters.eq("name", "Freya Polk"),
Updates.inc("age", 1)
)
);
bulkOperations.add(ClientNamespacedWriteModel.updateMany(
thingsNamespace,
Filters.eq("category", "electronic"),
Updates.set("manufacturer", "Premium Technologies")
)
);
ClientBulkWriteResult result = mongoClient.bulkWrite(bulkOperations);

Este ejemplo incrementa el valor del campo age por 1 en el documento que tiene un valor name de "Freya Polk" en la colección people. También establece el valor del campo manufacturer en "Premium Technologies" en todos los documentos que tienen un valor de category de "electronic" en la colección things.

Si varios documentos coinciden con el filtro de query especificado en una instancia de ClientNamespacedUpdateOneModel, la operación actualiza el primer resultado. Puede especificar un orden de clasificación en una instancia de ClientUpdateOneOptions para aplicar un orden a los documentos coincidentes antes de que el driver realice la operación de actualización, como se muestra en el siguiente código:

ClientUpdateOneOptions options = ClientUpdateOneOptions
.clientUpdateOneOptions()
.sort(Sorts.ascending("_id"));

El siguiente ejemplo muestra cómo utilizar el método bulkWrite() para reemplazar documentos existentes en las colecciones db.people y db.things:

MongoNamespace peopleNamespace = new MongoNamespace("db", "people");
MongoNamespace thingsNamespace = new MongoNamespace("db", "things");
List<ClientNamespacedWriteModel> bulkOperations = new ArrayList<>();
bulkOperations.add(ClientNamespacedWriteModel.replaceOne(
peopleNamespace,
Filters.eq("_id", 1),
new Document("name", "Frederic Hilbert")
)
);
bulkOperations.add(ClientNamespacedWriteModel.replaceOne(
thingsNamespace,
Filters.eq("_id", 1),
new Document("object", "potato")
)
);
ClientBulkWriteResult result = mongoClient.bulkWrite(bulkOperations);

Tras la correcta ejecución de este ejemplo, el documento con un valor _id de 1 en la colección people se reemplaza por un nuevo documento. El documento de la colección things con un valor _id de 1 se reemplaza por un nuevo documento.

Si varios documentos coinciden con el filtro de query especificado en una instancia de ClientNamespacedReplaceOneModel, la operación reemplaza el primer resultado. Se puede especificar un orden de clasificación en una instancia de ClientReplaceOneOptions para aplicar un orden a los documentos coincidentes antes de que el driver realice la operación de reemplazo, como se muestra en el siguiente código:

ClientReplaceOneOptions options = ClientReplaceOneOptions
.clientReplaceOneOptions()
.sort(Sorts.ascending("_id"));

Puede pasar una instancia de ClientBulkWriteOptions al método bulkWrite() para especificar opciones al ejecutar las operaciones de escritura masiva.

Por defecto, las operaciones individuales en una operación por lotes se ejecutan en el orden en que las especificas hasta que ocurre un error o se ejecutan correctamente. No obstante, puedes pasar false al método ordered() en la interfaz ClientBulkWriteOptions para realizar operaciones de guardar de manera desordenada. Al utilizar la opción no ordenada, una operación que produce errores no impide la ejecución de otras operaciones de escritura en la llamada al método bulkWrite().

El siguiente código configura el método ordered() en una instancia de ClientBulkWriteOptions y realiza una operación de guardar masiva para insertar varios documentos.

MongoNamespace namespace = new MongoNamespace("db", "people");
ClientBulkWriteOptions options = ClientBulkWriteOptions
.clientBulkWriteOptions()
.ordered(false);
List<ClientNamespacedWriteModel> bulkOperations = new ArrayList<>();
bulkOperations.add(
ClientNamespacedWriteModel.insertOne(
namespace,
new Document("_id", 1).append("name", "Rudra Suraj")
)
);
// Causes a duplicate key error
bulkOperations.add(
ClientNamespacedWriteModel.insertOne(
namespace,
new Document("_id", 1).append("name", "Mario Bianchi")
)
);
bulkOperations.add(
ClientNamespacedWriteModel.insertOne(
namespace,
new Document("name", "Wendy Zhang")
)
);
ClientBulkWriteResult result = mongoClient.bulkWrite(bulkOperations, options);

Incluso si la operación de escritura que inserta un documento con una clave duplicada resulta en un error, las otras operaciones se ejecutan porque la operación de escritura no está ordenada.

Si el driver encuentra un error durante una operación de escritura masiva, el driver lanza una MongoBulkWriteException. Un MongoBulkWriteException contiene un campo writeErrors que consiste en una lista de uno o más objetos WriteError asociados con la misma operación de escritura masiva.

Considera una colección que tiene una regla de validación de esquema donde el valor del campo quantity debe ser de tipo int. En el siguiente ejemplo, el driver arroja un MongoBulkWriteException cuando intentas insertar un documento con un valor de campo quantity de "three" y otro con un valor de campo quantity de "ten".

Exception in thread "main" com.mongodb.MongoBulkWriteException: Bulk write
operation result had errors at
com.mongodb.internal.connection.ProtocolHelper.getBulkWriteException(ProtocolHelper.java:258)
... at
BulkWriteMultipleValidationErrorsExample.main(BulkWriteMultipleValidationErrorsExample.java:30)
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)
at com.mongodb.internal.connection.ProtocolHelper.getBulkWriteException(ProtocolHelper.java:254)
... 19 more
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":"Banana","quantity":"ten"} }} at
com.mongodb.internal.connection.WriteResultHelper.createWriteException(WriteResultHelper.java:50)
at
com.mongodb.internal.connection.ProtocolHelper.getBulkWriteException(ProtocolHelper.java:254)
... 19 more

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 aprender más sobre los métodos y clases utilizados para realizar operaciones de escritura masiva en esta sección, consulta la siguiente documentación de API:

Volver

Delete Documents