(mongodb >=1.0.0)
MongoDB\Driver\BulkWrite::__construct — 创建一个新的 BulkWrite
构造一个新的 MongoDB\Driver\BulkWrite,它是一个可变对象,可以向其中添加一个或多个写入操作。这些写入操作可以使用 MongoDB\Driver\Manager::executeBulkWrite() 执行。
options
(array)
选项 | 类型 | 描述 | 默认值 |
---|---|---|---|
bypassDocumentValidation | bool |
如果为 此选项在 MongoDB 3.2+ 中可用,对于不支持文档级别验证的旧版服务器版本将被忽略。 |
false |
comment | mixed |
一个任意的注释,用于帮助跟踪数据库分析器、currentOp 输出和日志中的操作。 此选项在 MongoDB 4.4+ 中可用,如果为旧版服务器版本指定,则会在执行时导致异常。 |
|
let | array|object |
参数名称和值的映射。值必须是常量或闭合表达式,不引用文档字段。然后可以在聚合表达式上下文中将参数访问为变量(例如 此选项在 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)