El bulkWrite() Este método realiza operaciones de escritura por lotes en una sola colección. Este método reduce el número de viajes de ida y vuelta desde la aplicación a la instancia de MongoDB, lo que aumenta el rendimiento de la aplicación. Dado que solo se recibe el estado de éxito después de que todas las operaciones se completen, recomendamos usarlo si cumple con los requisitos de su caso de uso.
Puede especificar una o más de las siguientes operaciones de escritura 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 mencionadas anteriormente. Por ejemplo, la claseInsertOneModelencapsula la operación de escriturainsertOne. Consulte 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:objeto opcional que especifica configuraciones tales como si se debe garantizar que su instancia de MongoDB ordene sus 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
De forma predeterminada, MongoDB ejecuta las operaciones de escritura masiva una a una en el orden especificado (es decir, en serie). Durante una escritura masiva ordenada, si se produce un error durante el procesamiento de una operación, MongoDB regresa sin procesar las operaciones restantes de la lista. Por el contrario, al establecer ordered en false, MongoDB continúa procesando las operaciones de escritura restantes de la lista en caso de error. Las operaciones desordenadas son teóricamente más rápidas, ya que MongoDB puede ejecutarlas en paralelo, pero solo se recomiendan si las escrituras 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, incluido el número de documentos insertados, modificados y eliminados.
Si una o más de sus operaciones intentan establecer un valor que viola un índice único en su colección, se genera una excepción que debería verse 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 ejemplo de código realiza una operación de escritura masiva ordenada en la colección movies de la base de datos sample_mflix. La llamada de ejemplo a bulkWrite() incluye ejemplos de InsertOneModel, UpdateOneModel y DeleteOneModel.
Nota
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 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:
Entrada manual del servidorde validación de esquemas
bulkWrite() Documentación de la API
Documentación de la APIde BulkWriteOptions
Documentación de la API deBulkWriteResult
Documentación de la API deInsertOneModel
UpdateOneModel API Documentation
Documentación de la APIUpdateManyModel
Documentación de la API deDeleteOneModel
Documentación de la API deDeleteManyModel
Documentación de la API deReplaceOneModel