一括書き込み操作
Overview
このガイドでは、一括書込み操作を使用して、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 ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。