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
/ /

Bulk.execute() (método mongosh)

Tip

MongoDB también proporciona db.collection.bulkWrite() para realizar operaciones de escritura masiva.

Bulk.execute()

Ejecuta la lista de operaciones realizadas por el generador de operaciones Bulk().

Bulk.execute() acepta el siguiente parámetro:

Parameter
Tipo
Descripción

writeConcern

Documento

Opcional. Escribir el documento de interés para la operación masiva en su conjunto. Omitir el valor predeterminado. Para un mongod servidor independiente, el interés de escritura { w: majority } predeterminado es. Con un conjunto de réplicas, el interés de escritura predeterminado es,{ w: majority } a menos que se modifique como parte de la configuración del conjunto de réplicaso, potencialmente, si el conjunto de réplicas contiene varios árbitros.

Consulta Anular el nivel de confirmación de escritura (write concern) por defecto para un ejemplo.

No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura.

Devuelve:Un objeto que contiene el estado de la BulkWriteResult() operación.

Después de la ejecución, no puedes volver a ejecutar el objeto Bulk() sin reinicializarlo. Consulta db.collection.initializeUnorderedBulkOp() y db.collection.initializeOrderedBulkOp().

Este comando está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

Al ejecutar una ordered lista de operaciones, MongoDB las agrupa por operation type y contigüidad; es decir, las operacionescontiguas del mismo tipo se agrupan. Por ejemplo, si una lista ordenada tiene dos operaciones de inserción seguidas de una operación de actualización y otra de inserción, MongoDB agrupa las operaciones en tres grupos separados: el primero contiene las dos operaciones de inserción, el segundo contiene la operación de actualización y el tercero contiene la última operación de inserción. Este comportamiento está sujeto a cambios en futuras versiones.

Las Bulk() operaciones en mongosh y métodos comparables en los drivers no tienen límite para el número de operaciones en un grupo. Para ver cómo se agrupan las operaciones para la ejecución masiva de operaciones, llamar a Bulk.getOperations() después de la ejecución.

La ejecución de una ordered lista de operaciones en una colección particionada generalmente será más lenta que la ejecución de una lista unordered, ya que con una lista ordenada, cada operación debe esperar a que la anterior termine.

Al ejecutar una unordered lista de operaciones, MongoDB agrupa las operaciones. Con una operación masiva no ordenada, las operaciones en la lista pueden reordenarse para mejorar el rendimiento. Como tal, las aplicaciones no deben depender del orden al realizar unordered operaciones masivas.

Las Bulk() operaciones en mongosh y métodos comparables en los drivers no tienen límite para el número de operaciones en un grupo. Para ver cómo se agrupan las operaciones para la ejecución masiva de operaciones, llamar a Bulk.getOperations() después de la ejecución.

Bulk() se puede usar dentro de transacciones distribuidas.

Para operaciones de Bulk.insert(), la colección debe existir previamente.

Para Bulk.find.upsert(), si la operación resulta en una inserción o actualización, la colección debe existir previamente.

No establezcas explícitamente el nivel de confirmación de escritura para la operación si se ejecuta en una transacción. Para usar el nivel de confirmación de escritura con transacciones, consulta Transacciones y nivel de confirmación de escritura.

Importante

En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.

Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.

Lo siguiente inicializa un Bulk() generador items de operaciones en la colección, agrega una serie de operaciones de inserción y ejecuta las operaciones:

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );
bulk.execute( );

La operación devuelve el siguiente objeto BulkWriteResult():

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

Para obtener detalles sobre el objeto de retorno, consulta BulkWriteResult(). Para obtener detalles sobre los lotes ejecutados, consulta Bulk.getOperations().

La siguiente operación en un set de réplicas especifica un nivel de confirmación de escritura (write concern) de "w: 1" con un wtimeout de 5000 milisegundos, de modo que el método retorna después de que los guardados se propaguen a la mayoría de los miembros votantes del set de réplicas o el método expire después de cinco segundos.

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "efg123", status: "A", defaultQty: 100, points: 0 } );
bulk.insert( { item: "xyz123", status: "A", defaultQty: 100, points: 0 } );
bulk.execute( { w: 1, wtimeout: 5000 } );

La operación devuelve el siguiente objeto BulkWriteResult():

BulkWriteResult({
acknowledged: true,
insertedCount: 2,
insertedIds: {
'0': ObjectId("64e61e3b84ff8808cd43a92c"),
'1': ObjectId("64e61e3b84ff8808cd43a92d")
},
matchedCount: 0,
modifiedCount: 0,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {}
})

Tip

Consulte:

Bulk() para obtener una lista de los métodos disponibles para operaciones en bloque.

Volver

masivo

En esta página