Docs Menu
Docs Home

Realizar operaciones masivas

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():

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

El método bulkWrite() acepta los siguientes parámetros:

  • Un List de objetos que implementan WriteModel: las clases que implementan WriteModel corresponden a las operaciones de escritura mencionadas anteriormente. Por ejemplo, la clase InsertOneModel encapsula la operación de escritura insertOne. 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.

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 servidor de índice único

  • 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