このガイドでは、Java ドライバーを使用して MongoDB Atlas の配置、MongoDB インスタンス、またはレプリカセットに接続する方法を学習します。
Atlas クラスターに接続する ためのサンプル コードを表示するか、 MongoClient
クラスと接続 URI の詳細を学習するために読み進めることができます。
MongoClient
MongoDBに接続して通信するには、 MongoClient
クラスを使用します。MongoClientSettingsオブジェクトを作成するには、MongoClientSettings.builder()
メソッドとチェーン メソッドを使用して設定を指定します。これらを連鎖させた後、build()
メソッドを使用して MongoClientSettings
オブジェクトを作成します。
MongoClient
の動作を制御するために使用できるさまざまな設定の詳細については、MongoClient 設定の指定 ガイドを参照してください。
例
この例えでは、 ConnectionString
を指定する方法を示しています。
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyConnectionString(new ConnectionString("<your connection string>")) .build());
注意
連鎖注文
設定内の一部のオプションは、接続stringオプションにマップされます。 設定 と 接続stringで同じオプションを指定する場合、それらを連結する順序によってドライバーが使用するオプションが決まります。 ドライバーは、読み込んだ最後の設定を使用します。
たとえば、このスニペットには、ドライバーが利用可能なソケットに接続するための次の時間設定が含まれています。
接続stringは 内の を指定します
2 SECONDS
ソケット設定 は
5 SECONDS
以内に指定されます
MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder().applyConnectionString(new ConnectionString("mongodb+srv://<db_username>:<db_password>@<hostname>:<port>/<auth db>?connectTimeoutMS=2000")) .applyToSocketSettings(builder -> builder.connectTimeout(5L, SECONDS)) .build());
ドライバーはソケット設定オプションを最後に読み取るため、タイムアウトする前に 5 SECONDS
以内に使用可能なソケットに接続することが予想されます。
重要
クライアントの再利用
各 MongoClient
はデータベースへのスレッドセーフな接続のプールを表すため、ほとんどのアプリケーションで必要なインスタンスは、複数のスレッド間でも、MongoClient
の 1 つだけです。最大接続数などのすべてのリソース使用量の制限は、個々の MongoClient
インスタンスに適用されます。
Tip
インスタンスが不要になった場合は、常に MongoClient.close()
を呼び出してリソースをクリーンアップします。
接続URI
接続 URI は、ドライバが MongoDB 配置に接続するための指示のセットを提供します。このセットで、ドライバーに MongoDB への接続方法と接続中の動作を指示します。次の図は、サンプル接続 URI の各部分について説明しています。

この例では 、 DNS SRVレコードを持つ Atlas MongoDBデプロイに接続します。詳細については、このガイドの DNS サービス検出 セクション を参照してください。
注意
MongoDB Atlasに配置している場合は、 Atlasドライバー接続ガイドを参照し、言語ドロップダウンからJavaを選択して 接続stringを取得します。
DNS SRV アドレスを持たないインスタンスまたはレプリカセットに接続する場合は、プロトコルに標準接続文字列形式を指定するmongodb
を使用する必要があります。
パスワードベースの認証メカニズムを使用している場合は、プロトコルの後、接続文字列に認証情報が含まれます。user
の値をユーザー名に、pass
の値をパスワードに置き換えます。認証メカニズムで認証情報が必要ない場合は、接続 URI のこの部分を省略します。
接続 URI の次の部分では、ホスト名または IP アドレスを指定し、その後に MongoDB インスタンスのポートを指定します。この例では、sample.host
はホスト名を表し、27017
はポート番号を表します。これらの値を置き換えて、MongoDB インスタンスを参照します。
接続 URI の最後の部分には、パラメータとして接続オプションが含まれます。この例では、maxPoolSize=20
と w=majority
の 2 つの接続オプションを設定しています。接続オプションの詳細については、このガイドの「接続オプションの指定」セクションに進んでください。
DNS サービス検出
DNS サービス検出を使用して接続しているサービスの DNS SRVレコードを検索するには、接続文字列で SRV 接続形式を指定します。 この形式を指定すると、 Javaドライバーは新しいホストを自動的に再スキャンします。配置により、クライアント構成を変更しなくても、トポロジーにホストを追加できます。
次のコードは、 SRV 接続形式を使用する接続文字列を示しています。
String uri = "mongodb+srv://<hostname>/";
SRV 接続形式の詳細については、 MongoDB Serverマニュアルの「 SRV 接続形式 」のエントリを参照してください。
Atlas 接続例
Atlas 上の MongoDB 配置に接続するには、クライアントを作成します。MongoClientSettings
オブジェクトを MongoClients.create()
メソッドに渡すことで、接続文字列とその他のクライアント オプションを使用するクライアントを作成できます。
MongoClientSettings
オブジェクトをインスタンス化するには、ビルダ メソッドを使用して接続文字列とその他のクライアント オプションを指定し、build()
メソッドを呼び出します。接続 URI を指定するには、applyConnectionString()
メソッドをビルダにチェーンします。
MongoDB Server の新しいバージョンにアップグレードするときに重大な変更を回避するために、Stable API バージョンのクライアント オプションを設定できます。Stable API 機能について詳しくは、「Stable API」ページを参照してください。
次のコードは、Atlas 上の MongoDB 配置に接続するときに接続文字列と Stable API クライアント オプションを指定し、接続が成功したことを確認する方法を示します。
package fundamentals; import com.mongodb.*; import org.bson.BsonDocument; import org.bson.BsonInt64; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoDatabase; public class MongoClientConnectionExample { public static void main(String[] args) { // Replace the placeholder with your Atlas connection string String uri = "<connection string>"; // Construct a ServerApi instance using the ServerApi.builder() method ServerApi serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .build(); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString(uri)) .serverApi(serverApi) .build(); // Create a new client and connect to the server try (MongoClient mongoClient = MongoClients.create(settings)) { MongoDatabase database = mongoClient.getDatabase("admin"); try { // Send a ping to confirm a successful connection Bson command = new BsonDocument("ping", new BsonInt64(1)); Document commandResult = database.runCommand(command); System.out.println("Pinged your deployment. You successfully connected to MongoDB!"); } catch (MongoException me) { System.err.println(me); } } } }
MongoDB に接続する他の方法
Atlas でホストされていない単一の MongoDB 配置またはレプリカセットに接続する場合は、次のセクションで接続方法を確認してください。
ローカル マシン上の MongoDB 配置への接続
開発目的で、MongoDB Atlas クラスターを使用する代わりに、ローカル マシンで MongoDB 配置を実行する必要がある場合は、次の手順を完了する必要があります。
MongoDB Server の Communityバージョン または Enterprise バージョンをダウンロードします。
MongoDB Serverをインストールして構成します。
配置を開始します。
重要
MongoDB 配置を悪意のある攻撃から常に保護します。 セキュリティ推奨事項のリストについては、「セキュリティ チェックリスト」を参照してください。
MongoDB 配置を正常に開始したら、ドライバー接続コードで接続文字列を指定します。
MongoDB 配置がローカルで実行されている場合は、接続文字列 "mongodb://localhost:<port>"
を使用できます。ここで、<port>
は、着信接続をリッスンするようにサーバーに設定したポート番号です。
別のホスト名または IP アドレスを指定する必要がある場合は、接続文字列に関するサーバー マニュアルのエントリを参照してください。
配置に接続できるかどうかをテストするには、 への接続 に 記載のコード例の接続string MongoDB Atlasを置き換えて実行します。
レプリカセットへの接続
MongoDB レプリカセットの配置は、同じデータ セットを保存する接続されたインスタンスのグループです。このインスタンスの構成は、データの冗長性と高いデータ可用性を提供します。
レプリカセット配置に接続するには、レプリカセットのノードのホスト名(または IP アドレス)とポート番号を指定します。
レプリカセット内のホストの完全なリストを提供できない場合は、レプリカ内のホストの 1 つまたはサブセットを指定し、次のいずれかの方法で自動検出を実行するようにドライバーに指示できます。
replicaSet
パラメータの値としてレプリカセットの名前を指定directConnection
パラメーターの値としてfalse
を指定レプリカセットに複数のホストを指定
Tip
レプリカセットのホストのサブセットを指定することもできますが、レプリカセットのすべてのホストを含めることで、ホストの 1 つが到達できない場合でもドライバが接続を確立できるようにします。
次の例は、ConnectionString
クラスまたは MongoClientSettings
クラスを使用して、MongoClient
インスタンスに複数のホストを指定する方法を示しています。使用するクラスに対応するタブを選択します。
ConnectionString connectionString = new ConnectionString("mongodb://host1:27017,host2:27017,host3:27017"); MongoClient mongoClient = MongoClients.create(connectionString);
ServerAddress seed1 = new ServerAddress("host1", 27017); ServerAddress seed2 = new ServerAddress("host2", 27017); ServerAddress seed3 = new ServerAddress("host3", 27017); MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(seed1, seed2, seed3))) .build(); MongoClient mongoClient = MongoClients.create(settings);
注意
Docker のレプリカセット
レプリカセットがDockerで実行される場合、公開されるMongoDBエンドポイントは 1 つだけです。この場合、レプリカセットは検出できません。接続 URI で directConnection=false
を指定するか、このオプションを未設定のままにすると、アプリケーションがその接続に接続できなくなる可能性があります。
テスト環境または開発環境では、directConnection=true
を指定してレプリカセットに接続できます。本番環境では、Docker 仮想ネットワークの外部から各 MongoDB インスタンスにアクセスできるようにクラスターを構成することを推奨します。
よくある質問
このセクションでは、 MongoDB .に接続するときに発生し得る質問に答えます。
Javaドライバーに のMongoClient
2 つのタイプがあるのはなぜですか?
MongoClient
には 2 つのタイプがあります。これは、 CRUD頻度が複数ある API を含めることの混乱がない、新規ユーザー向けのよりクリーンなAPI が必要なためです。新しいCRUD API がJavaパッケージ構造で使用でき、 Java 9 で導入されたJavaモジュールのサポートで使用できることを確認したいと考えていました。
どのタイプのMongoClient
を使用すればよいか?
新しいアプリケーションでは通常、次の機能をサポートする com.mongodb.client.MongoClient
インターフェースが使用されます。
MongoClientSettings
とConnectionString
による構成。このインターフェースのインスタンスは、com.mongodb.client.MongoClients
クラスで定義されているファクトリー メソッドを使用して作成できます。MongoDatabase
を使用し、そこからMongoCollection
を使用してCRUD APIにアクセスします。
次の機能をサポートするレガシーAPIのサポートが必要な場合は、com.mongodb.MongoClient
クラスを使用します。
MongoClientOptions
とMongoClientURI
を使用する構成。DB
を使用し、そこからDBCollection
を使用してCRUD APIにアクセスします。このAPIには、getDB()
メソッドを使用してアクセスできます。
新しい API とレガシーAPI の組み合わせを必要とするアプリケーションの場合、com.mongodb.MongoClient
は次の機能もサポートしています。
MongoClientSettings
とConnectionString
を使用して構成します。唯一の違いは、 ファクトリークラスではなくコンストラクタを使用して インスタンスを作成することです。MongoDatabase
を使用してCRUD APIにアクセスし、そこからMongoCollection
を使用して CRUD API にアクセスします。このAPIには、getDatabase()
メソッドを使用してアクセスできます。
"java.lang.NoClassDefundError: com/ MongoDB /MongoClient" エラーを防ぐにはどうすればよいですか。
Java ランタイム環境で実行時にクラス ファイルが見つからない場合、 java.lang.NoClassDefFoundError
例外が発生することがあります。 MongoDB Java ドライバーを使用するアプリケーション コードを実行する場合は、クラスパスに適切なドライバー JAR ファイルを含める必要があります。
Java ドライバー JAR ファイルをクラスパスに追加した後にこのエラーが発生した場合は、環境内の次の項目を確認してください。
JAR ファイルは、クラスパスで指定されたロケーションに存在します。
クラスパス構文は正しいです。
環境変数でクラスパスを定義すると、Java ランタイム環境はその変数を使用します。
依存関係マネージャーを使用すると、解決できない競合は報告されません。
Tip
このエラーにはパッケージ名とクラス名が含まれているため、クラスパスからどのドライバー JAR が欠落している可能性があるかを特定できます。 エラーが参照するドライバー JAR を見つけるには、 API ドキュメントの各エントリを確認してください。
"com.mongodb.MongoSecurityException" エラーを防ぐにはどうすればよいですか。
MongoDB 配置に接続するときに無効な、または誤った形式の認証情報を指定すると、アプリケーションはこの例外をスローする可能性があります。
MongoDB 配置に接続しようとしたときにこのエラーが発生した場合は、コード内の次の項目を確認してください。
接続 URI は、正しいMongoDBデプロイに対応します。接続 URI の設定の詳細については、接続 URI を参照してください。
指定した認証メカニズムの認証情報が正しいです。認証情報を指定する方法については、認証メカニズムのガイドを参照してください。
指定した認証データベースの名前が正しい名前を付けました。 MongoDB 配置のユーザーとロールを設定する方法については、サーバー ドキュメントの「 ユーザーとロールの管理」を参照してください。
「IllectalStateException: 状態は オープン でなければなりません」というエラーを防ぐにはどうすればよいですか。
MongoDB への接続を閉じたMongoClient
インスタンスに対して 操作を呼び出すと、この例外が発生することがあります。 close()
メソッドがMongoClient
で呼び出されると、そのインスタンスでのそれ以降の操作呼び出しでこの例外がスローされます。
この例外を回避するには、 close()
を呼び出すコードの後に、 MongoClient
インスタンスに対する操作を呼び出さないようにします。
Tip
MongoClient
インスタンスを閉じるコードを見つけるのが困難な場合があります。 この例外の潜在的な原因を見つけるには、次のケースを検索してください。
MongoClient
インスタンスでclose()
を呼び出すMongoClient
が宣言されているtry-with-resources ステートメントの範囲外のMongoClient
インスタンスでの操作呼び出し
アプリケーションでMongoClient
を管理するフレームワークが使用されている場合は、接続動作を管理するためのベストプラクティスを参照してください。
SPI から MongoDB へのアクセスの詳細については、「 SPI と MongoDB 」を参照してください。