Docs Menu
Docs Home
/ / /
Java Sync Driver
/

一括操作の実行

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()の呼び出し例には、 InsertOneModelUpdateOneModelDeleteOneModelの例が含まれています。

注意

この例では、接続 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

Tip

Legacy API

レガシー API を使用している場合は、 FAQ ページ を参照して、このコード例に加える必要がある変更を確認してください。

このページで言及されているクラスとメソッドについての追加情報については、次のリソースを参照してください。

  • 一意のインデックスサーバーのマニュアルエントリ

  • スキーマ検証サーバーの手動入力

  • bulkWrite() API ドキュメント

  • BulkWriteOptions API ドキュメント

  • BulkWriteResult API ドキュメント

  • InsertOneModel API ドキュメント

  • UpdateOneModel API Documentation

  • UpdateManyModel API ドキュメント

  • DeleteOneModel API ドキュメント

  • DeleteManyModel API ドキュメント

  • ReplaceOneModel API ドキュメント

戻る

複数のドキュメントの削除