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

Operaciones de escritura masiva

En esta guía, puedes aprender a realizar múltiples operaciones de escritura en una sola llamada a la base de datos utilizando operaciones de escritura en bloque.

Imagine un escenario en el que desea insertar un documento en una colección, actualizar varios documentos y, finalmente, eliminar un documento. Si utiliza métodos individuales, cada operación requiere su propia llamada a la base de datos. En su lugar, puede usar una operación masiva para reducir el número de llamadas a la base de datos.

Los ejemplos de esta guía utilizan el restaurants colección en la base de datos sample_restaurants de la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación PHP, instancie un MongoDB\Client que se conecte a un clúster de Atlas y asigne el siguiente valor a tu variable $collection:

$collection = $client->sample_restaurants->restaurants;

Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulte la sección Primeros pasos con Atlas.

Para ejecutar una operación de escritura masiva, pasa un arreglo de operaciones de escritura al método MongoDB\Collection::bulkWrite(). Utilice la siguiente sintaxis para especificar las operaciones de guardar:

[
[ 'deleteMany' => [ $filter ] ],
[ 'deleteOne' => [ $filter ] ],
[ 'insertOne' => [ $document ] ],
[ 'replaceOne' => [ $filter, $replacement, $options ] ],
[ 'updateMany' => [ $filter, $update, $options ] ],
[ 'updateOne' => [ $filter, $update, $options ] ],
]

Tip

Para obtener más información sobre las operaciones de eliminar, insertar, reemplazar y actualizar, consulte Operaciones CRUD.

Al llamar al bulkWrite() método, la biblioteca ejecuta automáticamente las operaciones de escritura en el orden en que se especifican en el array. Para saber cómo indicarle bulkWrite() a que ejecute las operaciones de escritura en un orden arbitrario, consulte Modificar el comportamiento de escritura masiva.

Este ejemplo ejecuta las siguientes operaciones de escritura en la colección restaurants:

  • Insert operation para insertar un documento en el que el valor name sea 'Mongo's Deli'

  • Operación de actualización para actualizar el cuisine campo de un documento en el que el name valor es 'Mongo's Deli'

  • Operación de borrado para borrar todos los documentos en los que el valor de borough sea 'Manhattan'

$result = $collection->bulkWrite(
[
[
'insertOne' => [
['name' => 'Mongo\'s Deli'],
['cuisine' => 'Sandwiches'],
['borough' => 'Manhattan'],
['restaurant_id' => '1234'],
],
],
[
'updateOne' => [
['name' => 'Mongo\'s Deli'],
['$set' => ['cuisine' => 'Sandwiches and Salads']],
],
],
[
'deleteMany' => [
['borough' => 'Manhattan'],
],
],
],
);

Puede modificar el comportamiento del método MongoDB\Collection::bulkWrite() al pasar un arreglo que especifique valores de opción como parámetro. La siguiente tabla describe las opciones que puedes establecer en el arreglo:

Opción
Descripción

bypassDocumentValidation

Specifies whether the operation bypasses document validation. This lets you modify documents that don't meet the schema validation requirements, if any exist. For more information about schema validation, see Schema Validation in the MongoDB Server manual.
Defaults to false.

codec

Sets the codec to use for encoding or decoding documents. Bulk writes use the codec for insertOne() and replaceOne() operations. For more information, see Encode Data with Type Codecs.

writeConcern

Sets the write concern for the operation. For more information, see Write Concern in the MongoDB Server manual.

let

Specifies a document with a list of values to improve operation readability. Values must be constant or closed expressions that don't reference document fields. For more information, see the let statement in the MongoDB Server manual.

ordered

If set to true: when a single write fails, the operation stops without performing the remaining writes and throws an exception.
If set to false: when a single write fails, the operation continues to attempt the remaining write operations, if any, then throws an exception.
Defaults to true.

comment

Attaches a comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.

session

Specifies the client session to associate with the operation.

El siguiente ejemplo llama al método bulkWrite() para realizar una operación de inserción y eliminación, y establece la opción ordered en false:

$result = $collection->bulkWrite(
[
[
'insertOne' => [
['name' => 'Mongo\'s Pizza'],
['cuisine' => 'Italian'],
['borough' => 'Queens'],
['restaurant_id' => '5678'],
],
],
[
'deleteOne' => [
['restaurant_id' => '5678'],
],
],
],
['ordered' => false],
);

Si la librería ejecuta primero la operación de inserción, se elimina un documento. Si ejecuta primero la operación de borrar, no se borrarán documentos.

Nota

Las operaciones masivas no ordenadas no ofrecen garantías del orden de ejecución. El orden puede diferir de la manera en que los enumeras para optimizar el tiempo de ejecución.

El método MongoDB\Collection::bulkWrite() devuelve un objeto MongoDB\BulkWriteResult. Esta clase contiene las siguientes funciones miembro:

Función
Descripción

getDeletedCount()

Returns the number of documents deleted, if any.

getInsertedCount()

Returns the number of documents inserted, if any.

getInsertedIds()

Returns a map of _id field values for inserted documents, if any.

getMatchedCount()

Returns the number of documents matched during update and replace operations, if applicable.

getModifiedCount()

Returns the number of documents modified, if any.

getUpsertedCount()

Returns the number of documents upserted, if any.

getUpsertedIds()

Returns a map of _id field values for upserted documents, if any.

isAcknowledged()

Returns a boolean indicating whether the bulk operation was acknowledged.

Para aprender cómo realizar operaciones de guardar individuales, consulta los siguientes guías:

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Delete Documents

En esta página