PHP 8.5.0 Alpha 1 available for testing

La clase MongoDB\Driver\BulkWriteCommand

(mongodb >=2.1.0)

Introducción

MongoDB\Driver\BulkWriteCommand recupera una o varias operaciones de escritura que deben ser enviadas al servidor mediante el comando » bulkWrite introducido en MongoDB 8.0. Tras añadir cualquier número de operaciones de escritura, operaciones de modificación y operaciones de eliminación, el comando puede ser ejecutado a través de MongoDB\Driver\Manager::executeBulkWriteCommand().

A diferencia de MongoDB\Driver\BulkWrite, donde todas las operaciones de escritura deben apuntar a la misma colección, cada operación de escritura en MongoDB\Driver\BulkWriteCommand debe apuntar a una colección diferente.

Las operaciones de escritura pueden ser ordenadas (por defecto) o no ordenadas. Las operaciones ordenadas son enviadas al servidor, en el orden proporcionado, para una ejecución serial. Si una escritura falla, todas las operaciones restantes serán canceladas. Las operaciones no ordenadas son enviadas al servidor en un orden arbitrario donde pueden ser ejecutadas en paralelo. Todos los errores que ocurran son reportados después de que todas las operaciones hayan sido intentadas.

Sinopsis de la Clase

final class MongoDB\Driver\BulkWriteCommand implements Countable {
/* Métodos */
public __construct(?array $options = null)
public count(): int
public deleteMany(string $namespace, array|object $filter, ?array $options = null): void
public deleteOne(string $namespace, array|object $filter, ?array $options = null): void
public insertOne(string $namespace, array|object $document): mixed
public replaceOne(
    string $namespace,
    array|object $filter,
    array|object $replacement,
    ?array $options = null
): void
public updateMany(
    string $namespace,
    array|object $filter,
    array|object $update,
    ?array $options = null
): void
public updateOne(
    string $namespace,
    array|object $filter,
    array|object $update,
    ?array $options = null
): void
}

Ejemplos

Ejemplo #1 Operaciones de escritura mixtas

Las operaciones de escritura mixtas (por ejemplo, inserciones, actualizaciones y eliminaciones) serán enviadas al servidor mediante una sola comando » bulkWrite.

<?php

$manager
= new MongoDB\Driver\Manager;

$bulk = new MongoDB\Driver\BulkWriteCommand;

// Eliminar documentos de ambas colecciones
$bulk->deleteMany('db.coll_one', []);
$bulk->deleteMany('db.coll_two', []);

// Insertar documentos en dos colecciones
$bulk->insertOne('db.coll_one', ['_id' => 1]);
$bulk->insertOne('db.coll_two', ['_id' => 2]);
$bulk->insertOne('db.coll_two', ['_id' => 3]);

// Actualizar un documento en "coll_one"
$bulk->updateOne('db.coll_one', ['_id' => 1], ['$set' => ['x' => 1]]);

$result = $manager->executeBulkWriteCommand($bulk);

printf("%d documento(s) han sido insertado(s)\n", $result->getInsertedCount());
printf("%d documento(s) han sido actualizado(s)\n", $result->getModifiedCount());

?>

El resultado del ejemplo sería:

3 documento(s) han sido insertado(s)
1 documento(s) han sido actualizado(s)

Ejemplo #2 Operaciones de escritura ordenadas que causan 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("%d documento(s) han sido insertado(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) {
    }
  }
}
2 documento(s) han sido insertado(s)

Tabla de contenidos

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top