Overview
このページでは、レガシー API から現在の API に移行するために行う必要がある変更を識別できます。 また、現在の Java ドライバーに固有の機能と新しい API に移行することのメリットについても学べます。
mongodb-driver-legacy JAR としてパッケージ化されているレガシー API には、レガシー同期 Java ドライバーが含まれており、ドライバーの以前のバージョンで使用されていた命名規則を使用します。
mongodb-driver-sync JAR としてパッケージ化された現在の API には、現在の同期 Java ドライバーが含まれています。 CRUD 操作へのエントリ ポイントとしてMongoCollectionインターフェースを備えています。 レガシー API は含まれていません。
レガシー API から現在の API への移行を実行するには、必要に応じてコードを更新して、コードがレガシー API を参照しなくなっていることを確認してください。 次に、アプリケーションの依存関係内のレガシー API と、それを含むすべての uber JAR を、現在の API JAR に置き換えます。
必要な変更を処理するようにアプリケーションを更新するだけでなく、本番環境に移行する前に常にオプションと 値に関するその他の違いを確認してください。
現在の API メリット
新しい MongoDB Server のリリースごとに、レガシー API を引き続き使用できます。 ただし、レガシー API は MongoDB Server 3.0 以降で導入されたアップデートをサポートしていません。 さらに、レガシー API では現在の Java ドライバーの一部の機能のサポートが不足しています。 非レガシー API でのみ使用可能な機能には、次のようなものがあります。
変更ストリームは、単一のコレクション、データベース、または配置に対するリアルタイムの変更を監視するように設計された MongoDB Server の機能です。
マルチドキュメント ACID トランザクション。複数のドキュメントへの読み取りと書込みのアトミック性を確保し、複数の操作、コレクション、データベース、ドキュメント、シャードにわたるトランザクションを可能にします
時系列コレクション: 一定期間にわたる測定値のシーケンスを保存し、時系列データのクエリ効率を向上させます
Queryable Encryption : 機密ワークロードを暗号化し、暗号化されたデータを照会できます
Java レコード、またはビジネス ロジックをデータ表現から分離し、クエリを削減する 簡潔な Java クラス
ネイティブ POJO サポート。MongoDB ドキュメントと Java オブジェクト間の自動またはカスタム マッピングを提供します
現在のAPIの詳細な機能については、リリースノートを参照してください。
API の変更
次の表は、レガシー API と現在の API におけるクラス名とメソッド名の変更の大半を示しています。
Legacy | Current |
|---|---|
次のいずれかの方法を使用します。 | |
次のいずれかの方法を使用します。 | |
前述の項目に加えて、次の変更についても考慮してください。
現在の API は、オーバーロードされたメソッドではなく、
Optionsクラスとメソッド連鎖を使用します。現在の API は、ドライバー バージョン 4.0 以降ではデフォルトで緩和型 JSON 形式を使用します。 アプリケーションが厳密な JSON 形式に依存している場合は、データの読み取りまたは書き込みで厳密モードを使用します。 現在の API で JSON 形式を指定する方法については、ドキュメント データ形式: 拡張 JSONガイドを参照してください。
現在のAPIにおける
MongoCollectionのデフォルトのジェネリック型は org.bson.Document です。移行を容易にする 場合は、 基本DBObject を型パラメーターとして指定できます。現在の API では、
aggregate()メソッドに渡す集計パイプラインは、Bsonインターフェースを拡張するオブジェクトのリストを受け入れます。 レガシー API では、DBObjectインターフェースを拡張するオブジェクトのリストが受け入れられます。メソッド署名も API 間で異なります。 詳しくは、次の API ドキュメントを参照してください。
現在のAPIでの aggregate() メソッド
レガシーAPIの aggregate() メソッド
BSONインターフェース
DBObject インターフェース
よくある質問
このセクションでは、レガシーAPIに関して発生し得る質問に答えます。
レガシーAPIを使用してMongoDBインスタンスに接続するにはどうすればよいですか。
次のドキュメントのみを含むコレクションに接続しているとします。
{"_id": 1, "val": 1}
次の例は、レガシーAPIと現在のAPIを使用してこのMongoDBコレクションに接続する方法を示しています。
MongoClient client = new MongoClient(URI); DB db = client.getDB(DATABASE); DBCollection col = db.getCollection(COLLECTION); // Retrieves one document in the collection and prints it DBObject doc = col.find().one(); System.out.println(doc.toString());
MongoClient client = MongoClients.create(URI); MongoDatabase db = client.getDatabase(DATABASE); MongoCollection<Document> col = db.getCollection(COLLECTION); // Prints the first document retrieved from the collection as JSON Document doc = col.find().first(); System.out.println(doc.toJson());
上記のコード スニペットの出力は、次のようになります。
{"_id": 1, "val": 1}
前の例で使用されているレガシー クラスとメソッドの詳細については、次の API ドキュメント ページを参照してください。
レガシーと現在のAPIの違いのリストについては、レガシーAPIからの移行ページを参照してください。
レガシーのMongoClientOptionsクラスとMongoClientURIクラスはどのように使用しますか?
次の例は、レガシーのMongoClientOptions クラスと MongoClientURI クラスを使用して書込み保証 (write concern)を設定する方法を示しています。
MongoClientURI mongoURI = new MongoClientURI(URI, MongoClientOptions.builder() .writeConcern(WriteConcern.W1)); MongoClient client = new MongoClient(mongoURI);
MongoClientSettings options = MongoClientSettings.builder() .applyConnectionString(new ConnectionString(URI)) .writeConcern(WriteConcern.W1).build(); MongoClient client = MongoClients.create(options);
前の例で使用されているレガシークラスとメソッドの詳細については、次のAPIドキュメントを参照してください。
レガシーと現在のAPIの違いのリストについては、レガシーAPIからの移行ページを参照してください。