MongoDB\Driver\BulkWrite
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
MongoDB\Driver\BulkWrite
Референца за `class.mongodb-driver-bulkwrite.php` со подобрена типографија и навигација.
The MongoDB\Driver\BulkWrite class
класата MongoDB\Driver\BulkWrite
Вовед
На MongoDB\Driver\BulkWrite (mongodb >=1.0.0) собира една или повеќе операции за запишување што треба да се испратат до серверот. Откако ќе додадете кој било број на операции за вметнување, ажурирање и бришење, колекцијата може да се изврши преку.
MongoDB\Driver\Manager::executeBulkWrite()
Синопсис на класата
Примери
Операциите за запишување може да бидат нарачани (стандардно) или ненарачани. Нарачаните операции за запишување се испраќаат до серверот, по редослед како што се дадени, за сериско извршување. Ако запишувањето не успее, сите преостанати операции ќе бидат прекинати. Ненарачаните операции се испраќаат до серверот по случаен редослед каде што може да се извршуваат паралелно. Сите грешки што ќе се појават се пријавуваат откако ќе се обидат сите операции.
Пример #1 Мешани операции за запишување се групирани по тип
<?php
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);
$bulk->update(['x' => 2], ['$set' => ['x' => 1]]);
$bulk->insert(['_id' => 3, 'x' => 3]);
$bulk->delete(['x' => 1]);
?>Мешаните операции за запишување (т.е. вметнувања, ажурирања и бришења) ќе бидат составени во команди за запишување по тип за да се испратат последователно до серверот.
Ќе резултира со извршување на четири команди за запишување (т.е. заобиколувања). Бидејќи операциите се нарачани, третото вметнување не може да се испрати додека не се изврши претходното ажурирање.
<?php
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$bulk->delete([]);
$bulk->insert(['_id' => 1]);
$bulk->insert(['_id' => 2]);
$bulk->insert(['_id' => 3, 'hello' => 'world']);
$bulk->update(['_id' => 3], ['$set' => ['hello' => 'earth']]);
$bulk->insert(['_id' => 4, 'hello' => 'pluto']);
$bulk->update(['_id' => 4], ['$set' => ['hello' => 'moon']]);
$bulk->insert(['_id' => 3]);
$bulk->insert(['_id' => 4]);
$bulk->insert(['_id' => 5]);
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
try {
$result = $manager->executeBulkWrite('db.collection', $bulk, ['writeConcern' => $writeConcern]);
} catch (MongoDB\Driver\Exception\BulkWriteException $e) {
$result = $e->getWriteResult();
// Check if the write concern could not be fulfilled
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n",
$writeConcernError->getMessage(),
$writeConcernError->getCode(),
var_export($writeConcernError->getInfo(), true)
);
}
// Check if any write operations did not complete at all
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n",
$writeError->getIndex(),
$writeError->getMessage(),
$writeError->getCode()
);
}
} catch (MongoDB\Driver\Exception\Exception $e) {
printf("Other error: %s\n", $e->getMessage());
exit;
}
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Operation#7: E11000 duplicate key error index: db.collection.$_id_ dup key: { : 3 } (11000)
Inserted 4 document(s)
Updated 2 document(s)
Пример #2 Нарачани операции за запишување што предизвикуваат грешка
waiting for replication timed out (64): array (
'wtimeout' => true,
)
Operation#7: E11000 duplicate key error index: databaseName.collectionName.$_id_ dup key: { : 3 } (11000)
Inserted 4 document(s)
Updated 2 document(s)
Ако грижата за запишување не можеше да се исполни, горниот пример би прикажал нешто како:
<?php
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => false]);
/* ... */
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Operation#7: E11000 duplicate key error index: db.collection.$_id_ dup key: { : 3 } (11000)
Operation#8: E11000 duplicate key error index: db.collection.$_id_ dup key: { : 4 } (11000)
Inserted 5 document(s)
Updated 2 document(s)
Види Исто така
- собира една или повеќе операции за запишување што треба да се испратат до серверот. Откако ќе додадете кој било број на операции за вметнување, ажурирање и бришење, колекцијата може да се изврши преку
- MongoDB\Driver\WriteResult
- MongoDB\Driver\WriteConcern
- MongoDB\Driver\WriteConcernError
- MongoDB\Driver\WriteError
Содржина
- MongoDB\Driver\BulkWrite::__construct Ако го извршиме горниот пример, но дозволиме ненарачани запишувања:
- MongoDB\Driver\BulkWrite::count — Создај нов BulkWrite
- MongoDB\Driver\BulkWrite::delete — Број на операции за запишување во bulk
- MongoDB\Driver\BulkWrite::insert — Додај операција за бришење во bulk
- MongoDB\Driver\BulkWrite::update — Додај операција за вметнување во bulk