(mongodb >=2.1.0)
MongoDB\Driver\Manager::executeBulkWriteCommand — Ejecuta operaciones de escritura utilizando el comando bulkWrite
$bulk
, ?array $options
= null
): MongoDB\Driver\BulkWriteCommandResultEjecuta una o varias operaciones de escritura en el servidor primario utilizando el comando » bulkWrite introducido en MongoDB 8.0.
Una MongoDB\Driver\BulkWriteCommand puede ser construida con una o varias operaciones de escritura de tipos variados (por ejemplo, inserciones, actualizaciones y eliminaciones). Cada operación de escritura puede apuntar a una colección diferente.
El valor por omisión para la opción "writeConcern"
será
deducido de una transacción activa (indicada por la opción
"session"
), seguida por
la URI de conexión.
bulk
(MongoDB\Driver\BulkWriteCommand)The write(s) to execute.
options
Opción | Tipo | Descripción |
---|---|---|
session | MongoDB\Driver\Session |
Una sesión a asociar con la operación. |
writeConcern | MongoDB\Driver\WriteConcern |
Un asunto de escritura a aplicar a la operación. |
Returns MongoDB\Driver\BulkWriteCommandResult on success.
bulk
no contiene operaciones de escritura válidas.bulk
ya ha sido ejecutada. Los objetos MongoDB\Driver\BulkWriteCommand no pueden ser ejecutados múltiples veces."session"
se usa junto a un asunto de escritura no reconocido.Ejemplo #1 Operaciones de escritura mixtas
Las operaciones de escritura mixtas (por ejemplo, inserción, actualización y eliminación) serán enviadas al servidor utilizando una sola comando » bulkWrite
<?php
$manager = new MongoDB\Driver\Manager;
$bulk = new MongoDB\Driver\BulkWriteCommand;
// Elimina documentos de dos colecciones
$bulk->deleteMany('db.coll_one', []);
$bulk->deleteMany('db.coll_two', []);
// Añade documentos a dos colecciones
$bulk->insertOne('db.coll_one', ['_id' => 1]);
$bulk->insertOne('db.coll_two', ['_id' => 2]);
$bulk->insertOne('db.coll_two', ['_id' => 3]);
// Actualiza un documento en "coll_one"
$bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);
$result = $manager->executeBulkWriteCommand($bulk);
printf("Insertados %d documento(s)\n", $result->getInsertedCount());
printf("Actualizados %d documento(s)\n", $result->getModifiedCount());
?>
El resultado del ejemplo sería:
Insertados 3 documento(s) Actualizados 1 documento(s)
Ejemplo #2 Operación de escritura ordenada que provoca un error
<?php
$manager = new MongoDB\Driver\Manager;
$bulk = new MongoDB\Driver\BulkWriteCommand;
$bulk->deleteMany('db.coll', []);
$bulk->insertOne('db.coll', ['_id' => 1]);
$bulk->insertOne('db.coll', ['_id' => 2]);
$bulk->insertOne('db.coll', ['_id' => 1]);
$bulk->insertOne('db.coll', ['_id' => 3]);
try {
$result = $manager->executeBulkWriteCommand($bulk);
} catch (MongoDB\Driver\Exception\BulkWriteCommandException $e) {
$result = $e->getPartialResult();
var_dump($e->getWriteErrors());
}
printf("Insertados %d documento(s)\n", $result->getInsertedCount());
?>
El resultado del ejemplo sería algo similar a:
array(1) { [3]=> object(MongoDB\Driver\WriteError)#5 (4) { ["message"]=> string(78) "E11000 duplicate key error collection: db.coll index: _id_ dup key: { _id: 1 }" ["code"]=> int(11000) ["index"]=> int(3) ["info"]=> object(stdClass)#6 (0) { } } } Insertados 2 documento(s)