(mongodb >=1.0.0)
MongoDB\Driver\BulkWrite::__construct — Crear un nuevo BulkWrite
Construye un nuevo MongoDB\Driver\BulkWrite, que es un objeto mutable al cual se pueden añadir una o más operaciones de escritura. Las escrituras pueden ser ejecutadas posteriormente con MongoDB\Driver\Manager::executeBulkWrite().
options
(array)Option | Type | Description | Defaut |
---|---|---|---|
bypassDocumentValidation | bool |
Si Esta opción está disponible en MongoDB 3.2+ y es ignorada para las versiones anteriores del servidor, que no soportan la validación a nivel de documento. |
false |
comment | mixed |
Un comentario arbitrario para ayudar a trazar la operación a través del perfil del servidor de base de datos, la salida currentOp y los registros. Esta opción está disponible en MongoDB 4.4+ y lanzará una excepción en el momento de la ejecución si se especifica para una versión de servidor más antigua. |
|
let | array|object |
Map of parameter names and values. Values must be constant or closed expressions that do not reference document fields. Parameters can then be accessed as variables in an aggregate expression context (e.g. This option is available in MongoDB 5.0+ and will result in an exception at execution time if specified for an older server version. |
|
ordered | bool |
Las operaciones ordenadas (true ) son ejecutadas secuencialmente en el servidor MongoDB,
mientras que las operaciones no ordenadas (false ) son enviadas al servidor
en un orden arbitrario y pueden ser ejecutadas en paralelo.
|
true |
Versión | Descripción |
---|---|
PECL mongodb 1.14.0 |
Adición de las opciones "comment" y "let" .
|
PECL mongodb 1.1.0 |
Adición de la opción "bypassDocumentValidation" .
|
Ejemplo #1 Ejemplo de MongoDB\Driver\BulkWrite::__construct()
<?php
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$bulk->delete([]);
$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);
$bulk->update(
['x' => 2],
['$set' => ['x' => 1]],
['limit' => 1, 'upsert' => false]
);
$bulk->delete(['x' => 1], ['limit' => 1]);
$bulk->update(
['_id' => 3],
['$set' => ['x' => 3]],
['limit' => 1, 'upsert' => true]
);
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(1);
try {
$result = $manager->executeBulkWrite('db.collection', $bulk, ['writeConcern' => $writeConcern]);
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
$result = $e->getWriteResult();
// Verifica si la escritura no pudo ser realizada
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n",
$writeConcernError->getMessage(),
$writeConcernError->getCode(),
var_export($writeConcernError->getInfo(), true)
);
}
// Verifica si algunas operaciones de escritura no fueron realizadas
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n",
$writeError->getIndex(),
$writeError->getMessage(),
$writeError->getCode()
);
}
} catch (MongoDB\Driver\Exception\Exception $e) {
printf("Otro error: %s\n", $e->getMessage());
exit;
}
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
printf("Upserted %d document(s)\n", $result->getUpsertedCount());
printf("Deleted %d document(s)\n", $result->getDeletedCount());
?>
El resultado del ejemplo sería:
Inserted 2 document(s) Updated 1 document(s) Upserted 1 document(s) Deleted 1 document(s)