PHP8 MongoDB\Driver\Manager::executeBulkWrite
(mongoDB >=1.0.0)
MongoDB\Driver\Manager::executeBulkWrite — 执行一个或多个写入操作
说明
final public MongoDB\Driver\Manager::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $bulk, array|MongoDB\Driver\WriteConcern|null $options = null): MongoDB\Driver\WriteResult
在主服务器上执行一个或多个写入操作。
MongoDB\Driver\BulkWrite 可以使用 一个或多个不同类型的写入操作(例如更新、删除和 插入物)。驱动程序将尝试将相同类型的操作发送到 服务器在尽可能少的请求中优化往返。
参数
namespace
(字符串)完全限定的命名空间(例如 )。
"databaseName.collectionName"
bulk
(MongoDB\驱动程序\批量写入)要执行的写入。
options
选项 选择 类型 描述 会期 MongoDB\驱动程序\会话 要与操作关联的会话。
写关注点 MongoDB\驱动程序\WriteConcern 要应用于操作的写入关注点。
返回值
成功后返回 MongoDB\Driver\WriteResult。
错误/异常
- 如果不包含任何写入操作,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。bulk
- 如果已执行,则抛出 MongoDB\Driver\Exception\InvalidArgumentException。MongoDB\Driver\BulkWrite 对象不能多次执行。bulk
- 如果该选项与未确认的写入问题结合使用,则引发 MongoDB\Driver\Exception\InvalidArgumentException。"session"
- 在参数分析错误时抛出 MongoDB\Driver\Exception\InvalidArgumentException。
- 如果与服务器的连接失败(由于身份验证以外的原因),则抛出 MongoDB\Driver\Exception\ConnectionException。
- 如果需要身份验证并失败,则抛出 MongoDB\Driver\Exception\AuthenticationException。
- 在任何写入失败(例如写入错误、无法应用写入问题)时抛出 MongoDB\Driver\Exception\BulkWriteException
- 在其他错误上抛出 MongoDB\Driver\Exception\RuntimeException。
更新日志
版本 | 说明 |
---|---|
PECL mongodb 1.4.4 | MongoDB\Driver\Exception\InvalidArgumentException,如果在 与未确认的写入问题相结合。"session" |
PECL mongodb 1.4.0 | 第三个参数现在是一个数组。 为了向后兼容,此参数仍将接受 MongoDB\Driver\WriteConcern 对象。options |
PECL mongodb 1.3.0 | MongoDB\Driver\Exception\InvalidArgumentException现在被抛出,如果不包含任何写入 操作。以前,MongoDB\Driver\Exception\BulkWriteException 是 扔。bulk |
示例
示例 #1 MongoDB\Driver\Manager::executeBulkWrite() example
<?php
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(['_id' => 1, 'x' => 1]);
$bulk->insert(['_id' => 2, 'x' => 2]);
$bulk->update(['x' => 2], ['$set' => ['x' => 1]], ['multi' => false, 'upsert' => false]);
$bulk->update(['x' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->update(['_id' => 3], ['$set' => ['x' => 3]], ['multi' => false, 'upsert' => true]);
$bulk->insert(['_id' => 4, 'x' => 2]);
$bulk->delete(['x' => 1], ['limit' => 1]);
$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 100);
$result = $manager->executeBulkWrite('db.collection', $bulk, $writeConcern);
printf("Inserted %d document(s)\n", $result->getInsertedCount());
printf("Matched %d document(s)\n", $result->getMatchedCount());
printf("Updated %d document(s)\n", $result->getModifiedCount());
printf("Upserted %d document(s)\n", $result->getUpsertedCount());
printf("Deleted %d document(s)\n", $result->getDeletedCount());
foreach ($result->getUpsertedIds() as $index => $id) {
printf('upsertedId[%d]: ', $index);
var_dump($id);
}
/* If the WriteConcern could not be fulfilled */
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n", $writeConcernError->getMessage(), $writeConcernError->getCode(), var_export($writeConcernError->getInfo(), true));
}
/* If a write could not happen at all */
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n", $writeError->getIndex(), $writeError->getMessage(), $writeError->getCode());
}
?>
以上示例的输出类似于:
Inserted 3 document(s) Matched 1 document(s) Updated 1 document(s) Upserted 2 document(s) Deleted 1 document(s) upsertedId[3]: object(MongoDB\BSON\ObjectId)#5 (1) { ["oid"]=> string(24) "54d3adc3ce7a792f4d703756" } upsertedId[4]: int(3)
参见
- MongoDB\驱动程序\批量写入
- MongoDB\驱动程序\WriteResult
- MongoDB\驱动程序\WriteConcern
- MongoDB\Driver\Server::executeBulkWrite() - 在此服务器上执行一个或多个写入操作