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 mixed

一个任意的注释,用于帮助跟踪数据库分析器、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://localhost: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("上载了 %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