PHP8 MongoDB\Driver\Manager::executeBulkWrite

2024-04-08 10:15 更新

(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.4MongoDB\Driver\Exception\InvalidArgumentException,如果在 与未确认的写入问题相结合。"session"
PECL mongodb 1.4.0第三个参数现在是一个数组。 为了向后兼容,此参数仍将接受 MongoDB\Driver\WriteConcern 对象。options
PECL mongodb 1.3.0MongoDB\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() - 在此服务器上执行一个或多个写入操作


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号