Overview
このページには、 Kotlinアプリケーションがさまざまな設定を使用してMongoDBに接続する方法を示すコード例が含まれています。
Tip
このページの接続オプションの詳細については、各セクションに記載されているリンクを参照してください。
このページの接続例を使用するには、コード例をアプリケーションにコピーします。コード例にあるすべてのプレースホルダー(<hostname>など)を、 MongoDBデプロイに関連する値に置き換えてください。
サンプル アプリケーション
次のサンプルアプリケーションを使用して、このページの接続コード例をテストできます。
import com.mongodb.kotlin.client.coroutine.MongoClient import com.mongodb.kotlin.client.coroutine.MongoDatabase import kotlinx.coroutines.runBlocking import org.bson.Document import org.bson.BsonInt32 import com.mongodb.MongoException fun main() = runBlocking { // Replace the placeholder with your connection string val uri = "<connection string>" // Create a new client and connect to the server val mongoClient = MongoClient.create(uri) val database: MongoDatabase = mongoClient.getDatabase("test") try { // Send a ping to confirm a successful connection val command = Document("ping", BsonInt32(1)) val commandResult = database.runCommand(command) println("Ping response: $commandResult") println("Pinged your deployment. You successfully connected to MongoDB!") } catch (me: MongoException) { System.err.println(me) } }
接続
次のセクションでは、MongoDB のローカル インスタンスや Atlas のクラウドでホストされるインスタンスなど、さまざまなターゲットに接続する方法について説明します。
ローカル配置
次のコードは、 MongoDBデプロイに接続する方法を示しています。
val uri = "mongodb://localhost:27017/" val client = MongoClient.create(uri)
Atlas
次のコードは、Atlas でホストされている配置に接続する方法を示しています。
import com.mongodb.kotlin.client.coroutine.MongoClient import com.mongodb.MongoClientSettings import com.mongodb.ConnectionString import com.mongodb.ServerApi import com.mongodb.ServerApiVersion val uri = "<Atlas connection string>" val serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .strict(true) .deprecationErrors(true) .build() val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .serverApi(serverApi) .build() val client = MongoClient.create(settings)
レプリカセット
次のコードは、レプリカセットに接続する方法を示しています。
val uri = "mongodb://<replica set member>:<port>/?replicaSet=<replica set name>" val client = MongoClient.create(uri)
サーバーの選択
次のコードは、サーバー選択関数を指定する方法を示しています。
import com.mongodb.kotlin.client.coroutine.MongoClient import com.mongodb.MongoClientSettings import com.mongodb.ConnectionString val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>" val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .serverSelector(<selector function>) .build() val client = MongoClient.create(settings)
サーバー選択をカスタマイズする方法の詳細については、「 サーバー選択のカスタマイズ 」を参照してください。
Stable API
次のコードは、接続の Stable API設定を指定する方法を示しています。
import com.mongodb.kotlin.client.coroutine.MongoClient import com.mongodb.MongoClientSettings import com.mongodb.ConnectionString import com.mongodb.ServerApi import com.mongodb.ServerApiVersion val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>" val serverApi = ServerApi.builder() .version(ServerApiVersion.V1) .build() val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .serverApi(serverApi) .build() val client = MongoClient.create(settings)
Stable API の詳細については、「 Stable API 」を参照してください。
MongoDB Server実行時間の制限
注意
試験用機能
COT 機能は実験的なものであり、今後のドライバー リリースで変更される可能性があります。
timeoutMS 接続オプション
次のコードは、timeoutMS接続オプションを使用してクライアント側のタイムアウトを設定する方法を示しています。
import com.mongodb.kotlin.client.coroutine.MongoClient import com.mongodb.MongoClientSettings import com.mongodb.ConnectionString import java.util.concurrent.TimeUnit val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>" val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(uri)) .timeout(200L, TimeUnit.MILLISECONDS) .build() val client = MongoClient.create(settings)
import com.mongodb.kotlin.client.coroutine.MongoClient val uri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?timeoutMS=<timeout length>" val client = MongoClient.create(uri)
クライアント側タイムアウトの詳細については、「サーバーの実行時間の制限 」を参照してください。
接続プール
すべてのMongoClientインスタンスには、MongoDB トポロジー内の各サーバーに対する接続プールが組み込まれています。 接続プールはオンデマンドでソケットを開き、マルチスレッド アプリケーションで同時 MongoDB 操作をサポートします。
各接続プールの最大サイズはmaxPoolSizeオプションによって設定され、デフォルトは100になります。 サーバーへの使用中の接続数がmaxPoolSizeの値に達した場合、そのサーバーへの次のリクエストは、接続が利用可能になるまで待機します。
各MongoClientインスタンスは、サーバーの状態を監視するために MongoDB トポロジー内のサーバーごとに 2 つの追加のソケットを開きます。
たとえば、3 ノードのレプリカセットに接続されたクライアントは 6 個の監視ソケットを開きます。 また、各サーバー上でアプリケーションのスレッドをサポートするために必要な数のソケットを開きます(上限はmaxPoolSizeの値まで)。 maxPoolSizeが100で、アプリケーションがプライマリ(デフォルト)のみを使用している場合、プライマリ接続プールのみが増加し、合計接続数は最大106になります。 アプリケーションが 読み込み設定( read preference ) を使用してセカンダリ ノードをクエリする場合、それらのプールも大きくなり、合計接続数が306になる可能性があります。
さらに、接続プールにはレート制限があり、各接続プールは一度に最大でmaxConnectingの接続のみを並列に作成できます。 次の場合、追加のスレッドは待機を停止します。
既存のスレッドの 1 つが接続の作成を完了するか、既存の接続がプールにチェックバックされます。
接続作成のレート制限により、既存の接続を再利用するドライバーの能力が向上します。
minPoolSizeオプションを使用して、各サーバーへの同時接続の最小数を設定できます。デフォルトは0になります。 接続プールはこのソケット数で初期化されます。 ネットワークエラーによってソケットが閉じられ、ソケットの合計数(使用中とアイドル状態の両方)が最小値を下回る場合、最小値に達するまでさらにソケットが開かれます。
接続が削除され、 maxIdleTimeMSオプションに置き換えられる前に、プール内でアイドル状態を維持できる最大数を設定できます。この値のデフォルトは0 (制限なし)です。
MongoClientの次のデフォルト構成はほとんどのアプリケーションで動作します。
val client = MongoClient("<connection string>")
クライアントはプロセスごとに 1 回作成し、すべての操作で再利用します。 リクエストごとに新しいクライアントを作成することがよくあり、非常に非効率的です。
1 つのプロセス内で多数の同時 MongoDB 操作をサポートするには、 maxPoolSizeを増やすことができます。 プールが最大サイズに達すると、追加のスレッドはソケットが使用可能になるまで待機します。
ドライバーはソケットが利用可能になるまで待機できるスレッド数を制限しません。負荷が急増したときにプールのサイズを境界のあるキューに制限するのはアプリケーションの責任です。 スレッドはwaitQueueTimeoutMSオプションで指定された時間だけ待機します。デフォルトは120000 (120 秒)です。
ソケットを取得するためにwaitQueueTimeoutMSで定義された時間以上待機するスレッドは、接続エラーを発生させます。 すべての操作を完了することよりも、負荷急増中に操作の継続時間を制限することが重要な場合は、このオプションを使用します。
MongoClient.close()が任意のスレッドによって呼び出されると、ドライバーはすべてのアイドル ソケットを閉じ、プールに返されるときに使用中のすべてのソケットを閉じます。