このページでは、MongoDB Kotlin ドライバーの使用中に MongoDB インスタンスまたはレプリカセットに接続することで発生し得る問題の潜在的な解決策を提供します。
注意
このページには接続の問題のみがリストされます。 MongoDB でその他の問題が発生している場合は、次のリソースを検討してください。
バグの報告、ドライバーへの貢献、およびその他のリソースに関する情報については、「問題とヘルプ 」のトピックを参照してください。
一般的なサポート用のMongoDB Stack OverflowタグまたはMongoDB Reddit Community
接続エラー
次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示す一般的なメッセージです。
Error: couldn't connect to server 127.0.0.1:27017
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 サンプル エラー メッセージでは、ホスト名は127.0.0.1で、ポートは27017です。 MongoDB インスタンスのデフォルトのポート値は27017ですが、MongoDB を別のポートで通信するように構成できます。
ファイアウォールの設定
MongoDB 配置でデフォルトのポートを使用していることを前提とすると、ファイアウォールでポート27017が開いていることを確認します。 配置で別のポートを使用している場合は、ファイアウォールでポートが開いていることを確認してください。
重要
が MongoDB インスタンスで使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。
認証エラー
認証が正しく構成されていない場合、 Kotlin ドライバーは MongoDB インスタンスへの接続に失敗する可能性があります。 これにより、多くの場合、次のようなエラー メッセージが表示されます。
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
無効な接続stringは、 MongoDBに接続しようとする際の認証の問題の最も一般的な原因です。
注意
Kotlin ドライバーで接続文字列を使用する方法の詳細については、接続ガイドの「接続 URI 」を参照してください。
接続文字列にデータベースユーザー名とデータベースパスワードが含まれている場合は、それらが正しい形式であることを確認してください。
Atlasが MongoDBMongoDB Atlasに配置されている場合は、 接続例 を使用して接続string を確認できます。例にある接続stringを に置き換えてください。
レプリカセットに接続するときは、レプリカセット内のすべてのホストを 接続stringに含める必要があります。 接続string内の各ホストをカンマで区切ります。 これにより、ホストの 1 つが到達できない場合でも、ドライバは接続を確立できます。
認証データベースでユーザーがであることを確認
データベースユーザー名とデータベースパスワードを使用して接続を正常に認証するには、認証データベースにデータベースユーザー名を定義する必要があります。デフォルトの認証データベースは adminデータベースです。認証に別のデータベースを使用するには、接続文字列で authSource を指定します。 次の例では認証データベースとして users を使用するようにドライバーに指示します。
val mongoClient = MongoClient.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users")
メッセージの送信エラー
ドライバー経由でリクエストを送信し、コマンドを送信できない場合、多くの場合、次の一般的なエラーメッセージが表示されます。
com.mongodb.MongoSocketWriteException: Exception sending message
このエラーが発生した場合は、問題を解決するために次の方法をお試しください。
接続string確認
アプリ内の接続stringが正確であることを確認します。 これについては、 「 接続エラー」および「 認証エラー 」で説明されています。
認証データベースでユーザーがであることを確認
The user needs to be recognized in your authentication database. This is described under Authentication Error.
ファイアウォールの設定
The firewall needs to have an open port for communicating with the MongoDB instance. This is described under Connection Error.
接続数の確認
各MongoClientインスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この値は構成パラメータmaxPoolSizeによって定義され、デフォルトでは100に設定されます。 すでに開いている接続の数がmaxPoolSizeに等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がmaxIdleTimeMSの値を超えると、ドライバーはエラーで応答します。
タイムアウト エラー
ドライバーを介してサーバーにメッセージを送信すると、メッセージの応答に時間がかかることがあります。 このような状況が発生すると、次のいずれかのエラー メッセージのようなエラー メッセージが表示される場合があります。
Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description
これらのエラーが発生した場合は、問題を解決するために次の方法をお試しください。
セット maxConnectionTimeoutMS
maxConnectionTimeoutMSオプションは、 Kotlin ドライバーがタイムアウトするまでの接続を待機する時間を示します。 デフォルト値は10000です。 ドライバーをタイムアウトしないようにするには、この値を増やすか、 0に設定します。
maxConnectionLifeTime と maxConnectionIdleTime を設定する
maxConnectionLifeTimeとmaxConnectionIdleTimeの設定を検討してください。 これらのパラメーターは、MongoDB インスタンスとの接続を維持できる期間を構成します。 これらのパラメーターの詳細については、「接続プールの設定 」を参照してください。
接続数の確認
You might have too many open connections. The solution to this is described under Error Sending Message.
追加のヒント
具体的なエラーメッセージには関係ありませんが、接続の問題をトラブルシューティングする際に役立つ追加情報がこのセクションには含まれています。
TLS/SSL のログ情報の取得
TLS/SSL を使用している場合、-Djavax.net.debug=all システムプロパティを使用して追加のログステートメントを表示できます。これは、接続の問題をデバッグする際に役立ちます。詳細については、 TLS/SSL 接続をデバッグするためのOracleガイドを参照してください。