La bulkWrite() El método realiza operaciones de escritura por lotes en una única colección. Este método reduce el número de viajes de ida y vuelta de la red desde tu aplicación a tu instancia de MongoDB, lo que aumenta el rendimiento de tu aplicación. Puesto que solo recibes el estado de éxito después de que todas las operaciones regresan, te recomendamos usar esto si cumple con los requisitos de tu caso de uso.
Puedes especificar una o más de las siguientes operaciones de guardado en bulkWrite():
insertOneupdateOneupdateManydeleteOnedeleteManyreplaceOne
El método bulkWrite() acepta los siguientes parámetros:
Un
Listde objetos que implementanWriteModel: las clases que implementanWriteModelcorresponden a las operaciones de escritura antes mencionadas. Por ejemplo, la claseInsertOneModelencierra la operación de guardarinsertOne. Consulta los enlaces a la documentación de la API al final de esta página para obtener más información sobre cada clase.BulkWriteOptions: opcional objeto que especifica configuraciones, como si se debe asegurar que tu instancia de MongoDB ordene tus operaciones de escritura.
Nota
Las escrituras reintentables se ejecutan en operaciones de escritura masiva, a menos que incluyan una o más instancias de UpdateManyModel o DeleteManyModel.
Tip
Por defecto, MongoDB ejecuta las operaciones de escritura por lotes una por una en el orden especificado (es decir, de forma serial). Durante un guardado masivo ordenado, si ocurre un error durante el procesamiento de una operación, MongoDB devuelve sin procesar las operaciones restantes en la lista. Por el contrario, cuando se configura ordered en false, MongoDB continúa procesando las operaciones de escritura restantes en la lista en caso de error. Las operaciones no ordenadas son teóricamente más rápidas ya que MongoDB puede ejecutarlas en paralelo, pero solo debes usarlas si tus guardados no dependen del orden.
El método bulkWrite() devuelve un objeto BulkWriteResult que contiene información sobre los resultados de la operación de escritura, incluyendo el número de documentos insertados, modificados y eliminados.
Si una o más de sus operaciones intenta establecer un valor que infrinja un índice único en su colección, se genera una excepción que debería verse algo así:
The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].
De manera similar, si intenta realizar una escritura masiva en una colección que utiliza validación de esquema y una o más de sus operaciones de escritura proporcionan un formato inesperado, puede encontrar excepciones.
Ejemplo
El siguiente código de muestra realiza una operación de escritura por lotes ordenada en la colección movies de la base de datos sample_mflix. La llamada de ejemplo a bulkWrite() incluye ejemplos del InsertOneModel, UpdateOneModel y DeleteOneModel.
Nota
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 guía de conexión.
import com.mongodb.MongoException import com.mongodb.client.model.DeleteOneModel import com.mongodb.client.model.Filters import com.mongodb.client.model.InsertOneModel import com.mongodb.client.model.ReplaceOneModel import com.mongodb.client.model.UpdateOneModel import com.mongodb.client.model.UpdateOptions import com.mongodb.client.model.Updates import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking data class Movie(val title: String, val runtime: Int? = null) fun main() = runBlocking { // Replace the uri string with your MongoDB deployment's connection string val uri = "<connection string uri>" val mongoClient = MongoClient.create(uri) val database = mongoClient.getDatabase("sample_mflix") val collection = database.getCollection<Movie>("movies") try { val result = collection.bulkWrite( listOf( InsertOneModel(Movie("A Sample Movie")), InsertOneModel(Movie("Another Sample Movie")), InsertOneModel(Movie("Yet Another Sample Movie")), UpdateOneModel( Filters.eq(Movie::title.name,"A Sample Movie"), Updates.set(Movie::title.name, "An Old Sample Movie"), UpdateOptions().upsert(true) ), DeleteOneModel(Filters.eq("title", "Another Sample Movie")), ReplaceOneModel( Filters.eq(Movie::title.name, "Yet Another Sample Movie"), Movie("The Other Sample Movie", 42) ) ) ) println( """ Result statistics: inserted: ${result.insertedCount} updated: ${result.modifiedCount} deleted: ${result.deletedCount} """.trimIndent() ) } catch (e: MongoException) { System.err.println("The bulk write operation failed due to an error: $e") } mongoClient.close() }
Result statistics: inserted: 3 updated: 2 deleted: 1
Para obtener información adicional sobre las clases y métodos mencionados en esta página, consulte los siguientes recursos:
Índice único Entrada de manual del servidor
Entrada manual del servidorde validación de esquemas
bulkWrite() Documentación de la API
BulkWriteOptions Documentación de la API
BulkWriteResult Documentación de la API
InsertOneModel Documentación de la API
UpdateOneModel API Documentation
Documentación de la APIUpdateManyModel
DeleteOneModel Documentación de la API
Documentación de la API deDeleteManyModel
ReplaceOneModel Documentación de la API