Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

一括書き込み操作

項目一覧

  • Overview
  • サンプル データ
  • 一括操作
  • 一括書込み動作の変更
  • 戻り値
  • 詳細情報
  • API ドキュメント

このガイドでは、一括書込み操作を使用して、1 つのデータベース呼び出しで複数の書込み操作を実行する方法を学習できます。

コレクションにドキュメントを挿入 し、複数の他のドキュメントを更新してから、ドキュメントを削除するシナリオを考えてみましょう。 個々のメソッドを使用する場合、各操作には独自のデータベース呼び出しが必要です。 代わりに、 一括操作を使用して、データベースへの呼び出し回数を減らすことができます。

このガイドの例では、 Atlasサンプルデータセットsample_restaurantsデータベース内の restaurantsコレクションを使用します。 PHPアプリケーションからこのコレクションにアクセスするには、Atlas クラスターに接続するMongoDB\Clientをインスタンス化し、 $collection変数に次の値を割り当てます。

$collection = $client->sample_restaurants->restaurants;

MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 「Atlas を使い始める」ガイドを参照してください。

一括書込み操作を実行するには、書込み操作の配列をMongoDB\Collection::bulkWrite()メソッドに渡します。 書込み操作を指定するには、次の構文を使用します。

[
[ 'deleteMany' => [ $filter ] ],
[ 'deleteOne' => [ $filter ] ],
[ 'insertOne' => [ $document ] ],
[ 'replaceOne' => [ $filter, $replacement, $options ] ],
[ 'updateMany' => [ $filter, $update, $options ] ],
[ 'updateOne' => [ $filter, $update, $options ] ],
]

Tip

削除、挿入、置換、更新操作の詳細については、 書込み操作ガイドをご覧ください。

bulkWrite()メソッドを呼び出すと、ライブラリは 配列で指定された順序で書込み操作を自動的に実行します。 書き込み操作を任意の順序で実行するようbulkWrite()に指示する方法については、「一括書き込み動作の変更 」セクションを参照してください。

この例では、 restaurantsコレクションに対して次の書き込み操作を実行します。

  • 挿入操作は、 name値が'Mongo's Deli'であるドキュメントを挿入します

  • name値が'Mongo's Deli'であるドキュメントのcuisineフィールドを更新する更新操作

  • borough値が'Manhattan'であるすべてのドキュメントを削除する削除操作

$result = $collection->bulkWrite(
[
[
'insertOne' => [
['name' => 'Mongo\'s Deli'],
['cuisine' => 'Sandwiches'],
['borough' => 'Manhattan'],
['restaurant_id' => '1234'],
],
],
[
'updateOne' => [
['name' => 'Mongo\'s Deli'],
['$set' => ['cuisine' => 'Sandwiches and Salads']],
],
],
[
'deleteMany' => [
['borough' => 'Manhattan'],
],
],
]
);

オプション値を指定する配列をパラメーターとして渡すことで、 MongoDB\Collection::bulkWrite()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションについて説明しています。

オプション
説明
bypassDocumentValidation
Specifies whether the operation bypasses document validation. This lets you modify documents that don't meet the schema validation requirements, if any exist. For more information about schema validation, see Schema Validation in the MongoDB Server manual.
Defaults to false.
codec
Sets the codec to use for encoding or decoding documents. Bulk writes use the codec for insertOne() and replaceOne() operations. For more information, see the Codecs guide.
writeConcern
Sets the write concern for the operation. For more information, see Write Concern in the MongoDB Server manual.
let
Specifies a document with a list of values to improve operation readability. Values must be constant or closed expressions that don't reference document fields. For more information, see the let statement in the MongoDB Server manual.
ordered
If set to true: when a single write fails, the operation stops without performing the remaining writes and throws an exception.
If set to false: when a single write fails, the operation continues to attempt the remaining write operations, if any, then throws an exception.
Defaults to true.
comment
Attaches a comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual.
session
Specifies the client session to associate with the operation.

次の例では、 bulkWrite()メソッドを呼び出して挿入操作と削除操作を実行し、 orderedオプションをfalseに設定します。

$result = $collection->bulkWrite(
[
[
'insertOne' => [
['name' => 'Mongo\'s Pizza'],
['cuisine' => 'Italian'],
['borough' => 'Queens'],
['restaurant_id' => '5678'],
],
],
[
'deleteOne' => [
['restaurant_id' => '5678'],
],
],
],
['ordered' => false]
);

ライブラリが最初に挿入操作を実行した場合、ドキュメントが 1 つ削除されます。 削除操作が最初に実行される場合、ドキュメントは削除されません。

注意

順序なしの一括操作では、実行順序は保証されません。 この順序は、ランタイムを最適化するために一覧表示する方法とは異なる場合があります。

MongoDB\Collection::bulkWrite()メソッドはMongoDB\BulkWriteResultオブジェクトを返します。 このクラスには、次のメンバー関数が含まれています。

関数
説明
getDeletedCount()
Returns the number of documents deleted, if any.
getInsertedCount()
Returns the number of documents inserted, if any.
getInsertedIds()
Returns a map of _id field values for inserted documents, if any.
getMatchedCount()
Returns the number of documents matched during update and replace operations, if applicable.
getModifiedCount()
Returns the number of documents modified, if any.
getUpsertedCount()
Returns the number of documents upserted, if any.
getUpsertedIds()
Returns a map of _id field values for upserted documents, if any.
isAcknowledged()
Returns a boolean indicating whether the bulk operation was acknowledged.

個々の書込み操作を実行する方法については、次のガイドを参照してください。

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

置換