一括操作の実行
bulkWrite()
メソッドは、単一のコレクションに対してバッチ書き込み操作を実行します。 この方法により、アプリケーションから MongoDB インスタンスへのネットワーク ラウンド トリップの回数が削減され、アプリケーションのパフォーマンスが向上します。 すべての操作が返された後にのみ成功ステータスを受け取るため、ユースケースの要件を満たしている場合は、これを使用することをお勧めします。
bulkWrite()
では、次の書き込み操作を 1 つ以上指定できます。
ドキュメントの挿入
ドキュメントの更新
複数のドキュメントの更新
ドキュメントの削除
複数のドキュメントの削除
ドキュメントの置き換え
bulkWrite()
メソッドは次のパラメーターを受け入れます:
WriteModel
を実装するオブジェクトのList
:WriteModel
を実装するクラスは、前述の書込み操作に対応します。 たとえば、InsertOneModel
クラスはドキュメントを挿入するinsertOne()
書込みメソッドをラップします。 各クラスの詳細については、このページの最後にある API ドキュメントへのリンクを参照してください。BulkWriteOptions
: MongoDB インスタンスが書込み操作を順序付けようにするかどうかなどの設定を指定する任意のオブジェクト。
注意
MongoDB Server バージョン 3.6 以降の一括書き込み操作では、 UpdateManyModel
またはDeleteManyModel
のインスタンスが 1 つ以上含まれている場合を除き、再試行可能な書き込みが実行されます。
Tip
デフォルトでは、MongoDB は指定された順序の一括書込みで操作を実行します。 順序付き一括書込み中に、操作の処理中にエラーが発生した場合、MongoDB はリスト内の残りの操作を処理せずに返します。
対照的に、 ordered
オプションをfalse
に設定すると、エラーが発生した場合でも、MongoDB はリスト内の残りの書込み操作の処理を続行します。 順序なし操作は MongoDB が並列に実行できるため、通常は高速ですが、書込み操作の順序が重要でない場合にのみ、順序なしの一括書込みを使用します。
bulkWrite()
メソッドは、挿入、変更、削除されたドキュメントの数など、書込み(write)操作の結果に関する情報を含むBulkWriteResult
オブジェクトを返します。
1 つ以上の操作でコレクションの一意なインデックスに違反する値を設定しようとすると、次のようになります例外が発生します。
The bulk write operation failed due to an error: Bulk write operation error on server <hostname>. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error collection: ... }].
同様に、スキーマ検証を使用し、1 つ以上の書込み (write) 操作が予期しない形式を提供するコレクションに対して一括書込みを実行しようとすると、例外が発生する可能性があります。
例
次のコード サンプルでは、 sample_mflix
データベースのmovies
コレクションに対して順序付き一括書き込み操作を実行します。 bulkWrite()
の呼び出し例には、 InsertOneModel
、 UpdateOneModel
、 DeleteOneModel
の例が含まれています。
注意
この例では、接続 URI を使用して MongoDB のインスタンスに接続します。 MongoDB インスタンスへの接続の詳細については、「 接続ガイド 」を参照してください。
// Runs bulk write operations on a collection by using the Java driver package usage.examples; import java.util.Arrays; import org.bson.Document; import com.mongodb.MongoException; import com.mongodb.bulk.BulkWriteResult; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.DeleteOneModel; import com.mongodb.client.model.InsertOneModel; import com.mongodb.client.model.ReplaceOneModel; import com.mongodb.client.model.UpdateOneModel; import com.mongodb.client.model.UpdateOptions; public class BulkWrite { public static void main(String[] args) { // Replace the uri string with your MongoDB deployment's connection string String uri = "<connection string uri>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase("sample_mflix"); MongoCollection<Document> collection = database.getCollection("movies"); try { // Runs a bulk write operation for the specified insert, update, delete, and replace operations BulkWriteResult result = collection.bulkWrite( Arrays.asList( new InsertOneModel<>(new Document("name", "A Sample Movie")), new InsertOneModel<>(new Document("name", "Another Sample Movie")), new InsertOneModel<>(new Document("name", "Yet Another Sample Movie")), new UpdateOneModel<>(new Document("name", "A Sample Movie"), new Document("$set", new Document("name", "An Old Sample Movie")), new UpdateOptions().upsert(true)), new DeleteOneModel<>(new Document("name", "Yet Another Sample Movie")), new ReplaceOneModel<>(new Document("name", "Yet Another Sample Movie"), new Document("name", "The Other Sample Movie").append("runtime", "42")) )); // Prints the number of inserted, updated, and deleted documents System.out.println("Result statistics:" + "\ninserted: " + result.getInsertedCount() + "\nupdated: " + result.getModifiedCount() + "\ndeleted: " + result.getDeletedCount()); // Prints a message if any exceptions occur during the operations } catch (MongoException me) { System.err.println("The bulk write operation failed due to an error: " + me); } } } }
上記のコードの出力は、次のようになります。
Result statistics: inserted: 3 updated: 2 deleted: 1
このページで言及されているクラスとメソッドについての追加情報については、次のリソースを参照してください。
一意のインデックスサーバーのマニュアルエントリ
スキーマ検証サーバーの手動入力
bulkWrite() APIドキュメント
BulkWriteOptions API ドキュメント
BulkWriteResult API ドキュメント
InsertOneModel API ドキュメント
UpdateOneModel API Documentation
UpdateManyModel API ドキュメント
DeleteOneModel API ドキュメント
DeleteManyModel API ドキュメント
ReplaceOneModel API ドキュメント