Definición
Mongo.bulkWrite() realiza múltiples operaciones de escritura en múltiples bases de datos y colecciones en una sola llamada, a diferencia de db.collection.bulkWrite()
que funciona en una única colección.
Nota
Requiere MongoDB 8.0 o posterior.
Sintaxis
Puedes llamar a bulkWrite() en la siguiente instancia Mongo() usando la siguiente sintaxis:
db.getMongo().bulkWrite( [ { namespace: "<db1.collection1>", name: "insertOne", document: { ... } }, { namespace: "<db2.collection2>", name: "replaceOne", filter: { ... } } ], { ordered: boolean, verboseResults: boolean, bypassDocumentValidation: boolean, let: Document } )
También puedes llamarlo en una instancia Mongo diferente, como en el siguiente ejemplo:
const otherMongo = Mongo("<other connection string>"); otherMongo.bulkWrite([{ namespace: "<db.collection>", ... }]);
bulkWrite() acepta dos parámetros:
Parameter | Tipo | Descripción |
|---|---|---|
| Arreglo de documentos | Define una matriz de operaciones de escritura. Cada documento de la matriz representa una operación de escritura que se desea ejecutar. |
| Documento | Define las opciones para la operación. |
Un documento en operations puede representar una de seis operaciones:
Inserte uno
reemplazar uno
actualización uno
Actualiza muchos
eliminar uno
deleteMany
Las siguientes secciones describen la sintaxis que debes utilizar para los documentos que representan cada operación.
Inserte uno
{ namespace: '<db.collection>', name: 'insertOne', document: Document }
Campo | Tipo | Descripción |
|---|---|---|
| String | La base de datos y la colección para la operación de inserción. |
| String | El nombre de la operación. Establezca en |
| Documento | El documento a insertar. |
Nota
Si el documento no incluye un campo _id, mongosh genera uno automáticamente.
Actualizar uno y actualizar muchos
updateOne actualiza el primer documento que coincida con el filtro. updateMany actualiza todos los documentos que coinciden con el filtro.
{ namespace: '<db>.<collection>', name: 'updateOne' | 'updateMany', filter: Document, update: Document | Document[], arrayFilters?: Document[], hint?: Document | string, collation?: Document, upsert?: boolean }
Campo | Tipo | Descripción |
|---|---|---|
| String | La base de datos y la colección para la operación de actualización. |
| String | El nombre de la operación. Defínelos en |
| Documento | El filtro que coincide con uno o más documentos que pretendes actualizar. |
| Documento o conjunto de documentos | La actualización a realizar. |
| Arreglo de documentos | Opcional. Filtros para especificar qué elementos de la matriz actualizar si se actualiza un campo con valor de matriz. |
| Documento o string | opcional. El índice que se utilizará para la operación. |
| Documento | (Opcional) La intercalación que se utilizará al ordenar los resultados. |
| Booleano | opcional. Si |
Reemplace uno
{ namespace: '<db>.<collection>', name: 'replaceOne', filter: Document, replacement: Document, hint?: Document | string, collation?: Document }
Campo | Tipo | Descripción |
|---|---|---|
| String | La base de datos y la colección para la operación de reemplazo. |
| String | El nombre de la operación. Establezca en |
| Documento | El filtro que coincide con el documento que deseas actualizar. |
| Documento | El documento de reemplazo. |
| Documento o string | opcional. El índice que se utilizará para la operación. |
| Documento | (Opcional) La intercalación que se utilizará al ordenar los resultados. |
Borrar uno o varios
deleteOne borra el primer documento que coincida con el filtro. deleteMany borra todos los documentos que coinciden con el filtro.
{ namespace: '<db>.<collection>', name: 'deleteOne' | 'deleteMany', filter: Document, hint?: Document | string, collation?: Document }
Campo | Tipo | Descripción |
|---|---|---|
| String | La base de datos y la colección para la operación de borrado. |
| String | El nombre de la operación. Defínelos en |
| Documento | El selector de query para hacer coincidir documentos para borrar. |
| Documento o string | opcional. El índice que se utilizará para la operación. |
| Documento | opcional. La intercalación que se utilizará para la operación. |
opciones
{ ordered?: boolean, verboseResults?: boolean, bypassDocumentValidation?: boolean, let?: Document }
Campo | Tipo | Descripción |
|---|---|---|
| Booleano | (Opcional) Indica que MongoDB realiza la escritura masiva en el orden de los documentos que se proporcionan. Si |
| Booleano | (Opcional) Especifica si |
| Booleano | (Opcional) Especifica si la operación de escritura omite las reglas de validación del documento. El valor predeterminado es |
| Documento | (Opcional) Documento de nombres y valores de parámetros a los que puedes acceder mediante variables de agregación. |
Salida
bulkWrite() devuelve un objeto con los siguientes campos:
{ acknowledged: boolean, insertedCount: int, matchedCount: int, modifiedCount: int, deletedCount: int, upsertedCount: int, insertResults?: map(int, document), updateResults?: map(int, document), deleteResults?: map(int, document) }
Campo | Tipo | Descripción |
|---|---|---|
| booleano |
|
| entero | Número de documentos insertados. |
| entero | Número de documentos coincidentes con el filtro. |
| entero | Número de documentos modificados. |
| entero | Número de documentos eliminados. |
| entero | Número de documentos actualizados. |
| Mapa de enteros a documentos | Opcional. Representa el resultado de cada inserción realizada correctamente. Cada operación se representa mediante una clave entera, que contiene un documento con la información correspondiente. El documento incluye el siguiente campo:
|
| Mapa de enteros a documentos | opcional. Representa los resultados de cada operación de actualización exitosa. Cada operación está representada por una clave entera, que contiene un documento con información correspondiente a la operación. El documento incluye los siguientes campos:
|
| Mapa de enteros a documentos | opcional. Representa los resultados de cada operación de borrar exitosa. Cada operación está representada por una clave entera, que contiene un documento con información correspondiente a la operación. El documento incluye el siguiente campo:
|
Ejemplos
Este ejemplo utiliza Mongo.bulkWrite() para realizar las siguientes operaciones en orden en la base de datos sample_mflix.
inserta un documento en la colección
usersactualiza un documento en la colección
theatersinserta otro documento en la colección
users
db.getMongo().bulkWrite( [ { namespace: 'sample_mflix.users', name: 'insertOne', document: { name: 'Cersei Lannister', email: 'cersei.l@example.com', password: '$2b$12$UREFwsRUoyF0CRqGNK0LzO0HM/jLhgUCNNIJ9RJAqMUQ74crlJ1Vu' } }, { namespace: 'sample_mflix.theaters', name: 'updateOne', filter: { theaterId: 1000 }, update: { $set: { "location.address.street1": "350 W Market", "location.address.city": "Bloomington" } } }, { namespace: 'sample_mflix.users', name: 'insertOne', document: { name: 'Sansa Stark', email: 'sansa.s@example.com', password: '$2b$12$UREFwsRUoyF0CRqGNK0LzO0HM/jLhgUCNNIJ9RJAqMUQ74crlJ1Vu' } } ], { ordered: true, bypassDocumentValidation: true, verboseResults: true } )
mongosh realiza la escritura masiva en orden y devuelve el siguiente documento:
{ acknowledged: true, insertedCount: 2, matchedCount: 1, modifiedCount: 1, deletedCount: 0, upsertedCount: 0, insertResults: Map(2) { 0 => { insertedId: "..." }, 2 => { insertedId: "..." } }, updateResults: Map(1) { 1 => { matchedCount: 1, modifiedCount: 1, didUpsert: false } }, deleteResults: Map(0) {} }