(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 | 混合类型 |
任意注释,用于帮助通过数据库分析器、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://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)