PHP Conference Japan 2024

MongoDB\Driver\BulkWrite::__construct

(mongodb >=1.0.0)

MongoDB\Driver\BulkWrite::__construct创建一个新的BulkWrite

描述

public MongoDB\Driver\BulkWrite::__construct(?array $options = null)

构造一个新的MongoDB\Driver\BulkWrite,它是一个可变对象,可以向其中添加一个或多个写入操作。然后可以使用MongoDB\Driver\Manager::executeBulkWrite()执行写入操作。

参数

options (array)

选项
选项 类型 描述 默认值
bypassDocumentValidation bool

如果为true,则允许插入和更新操作绕过文档级别的验证。

此选项在MongoDB 3.2+中可用,对于旧版本的服务器,由于不支持文档级别的验证,此选项将被忽略。

false
comment 混合类型

任意注释,用于帮助通过数据库分析器、currentOp 输出和日志跟踪操作。

此选项在MongoDB 4.4+中可用,如果为旧版本的服务器指定此选项,则会在执行时引发异常。

let array|object

参数名称和值的映射。值必须是常量或封闭表达式,不能引用文档字段。然后可以在聚合表达式上下文中(例如 $$var)访问参数作为变量。

此选项在MongoDB 5.0+中可用,如果为旧版本的服务器指定此选项,则会在执行时引发异常。

ordered bool 有序操作 (true) 在MongoDB服务器上串行执行,而无序操作 (false) 以任意顺序发送到服务器,并可能并行执行。 true

错误/异常

变更日志

版本 描述
PECL mongodb 1.14.0 添加了 "comment""let" 选项。
PECL mongodb 1.1.0 添加了 "bypassDocumentValidation" 选项。

示例

示例 #1 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://127.0.0.1:27017');
$writeConcern = new MongoDB\Driver\WriteConcern(1);

try {
$result = $manager->executeBulkWrite('db.collection', $bulk, $writeConcern);
} catch (
MongoDB\Driver\Exception\BulkWriteException $e) {
$result = $e->getWriteResult();

// 检查写入关注点是否无法满足
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n",
$writeConcernError->getMessage(),
$writeConcernError->getCode(),
var_export($writeConcernError->getInfo(), true)
);
}

// 检查是否有任何写入操作完全未完成
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n",
$writeError->getIndex(),
$writeError->getMessage(),
$writeError->getCode()
);
}
} catch (
MongoDB\Driver\Exception\Exception $e) {
printf("其他错误: %s\n", $e->getMessage());
exit;
}

printf("插入了 %d 条文档\n", $result->getInsertedCount());
printf("更新了 %d 条文档\n", $result->getModifiedCount());
printf("Upserted %d 条文档\n", $result->getUpsertedCount());
printf("删除了 %d 条文档\n", $result->getDeletedCount());

?>

以上示例将输出

Inserted 2 document(s)
Updated  1 document(s)
Upserted 1 document(s)
Deleted  1 document(s)

另见

添加注释

用户贡献的注释

此页面没有任何用户贡献的注释。
To Top