Overview
このガイドでは、一括書込み操作を使用して、1 つのデータベース呼び出しで複数の書込み操作を実行する方法を学習できます。
コレクションにドキュメントを挿入 し、複数の他のドキュメントを更新してから、ドキュメントを削除するシナリオを考えてみましょう。 個々のメソッドを使用する場合、各操作には独自のデータベース呼び出しが必要です。 代わりに、 一括操作を使用して、データベースへの呼び出し回数を減らすことができます。
サンプル データ
The examples in this guide use the restaurants collection in the sample_restaurants database from the Atlas sample datasets. To access this collection from your PHP application, instantiate a MongoDB\Client that connects to an Atlas cluster and assign the following value to your $collection variable:
$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
削除する、挿入、置換、および更新操作の詳細については、 CRUD操作 を参照してください。
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()メソッドの動作を変更できます。 次の表では、 配列に設定できるオプションについて説明しています。
オプション | 説明 |
|---|---|
| 操作がドキュメント検証をバイパスするかどうかを指定します。これにより、スキーマ検証要件を満たさないドキュメント(存在する場合)を変更できます。スキーマ検証の詳細については、 MongoDB Serverマニュアルの「 スキーマバリデーション 」を参照してください。デフォルトは |
| ドキュメントのエンコードまたはデコードに使用するコーデックを設定します。一括書き込みでは、 |
| Sets the write concern for the operation. For more information, see Write Concern in the MongoDB Server manual. |
| 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. |
|
|
| Attaches a comment to the operation. For more information, see the insert command fields guide in the MongoDB Server manual. |
| 操作に関連付けるクライアントセッションを指定します。 |
次の例では、 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オブジェクトを返します。 このクラスには、次のメンバー関数が含まれています。
関数 | 説明 |
|---|---|
| 削除されたドキュメントの数を返します(存在する場合)。 |
| 挿入されたドキュメントの数を返します(存在する場合)。 |
| 挿入されたドキュメントの |
| 更新操作および置換操作中に一致したドキュメントの数を返します(該当する場合)。 |
| 変更されたドキュメントの数を返します(存在する場合)。 |
| アップサートされたドキュメントの数を返します(存在する場合)。 |
| アップサートされたドキュメントの |
| 一括操作が確認されたかどうかを示すブール値を返します。 |
詳細情報
個々の書込み操作を実行する方法については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。