Docs Menu
Docs Home
/ / /
Scala
/

MongoDB に接続する

項目一覧

  • 前提条件
  • MongoClient
  • 接続URI
  • MongoDB Atlas への接続
  • MongoDB のローカル配置への接続
  • レプリカセットへの接続
  • シャーディングされたクラスターへの接続
  • 接続オプション
  • 接続チュートリアル

このガイドでは、Scala ドライバーを使用して MongoDB に接続する方法について説明します。

実行中の MongoDB 配置に接続するには、 MongoClient()メソッドを使用します。

重要

次の例では、 MongoClientをインスタンス化する方法を網羅するものではありません。 コンフィギュレーション MongoClientメソッドの完全なリストについては、 MongoClient API ドキュメントを参照してください。

注意

システム キープアライブ設定は、より短いタイムアウトで構成することを強くお勧めします。

詳細は、 「 TCP キープアライブ時間が MongoDB デプロイに及ぼす影響」を参照してください。 詳細については、サーバー マニュアル FAQ の質問と回答を参照してください。

このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。

  • 接続する実行中の MongoDB 配置。 たとえば、スタンドアロン配置に接続するには、実行中のスタンドアロン配置への アクセス権が必要です。

  • プロジェクトにインストールされたドライバー依存関係。 ドライバーをインストールする方法については、「 インストール 」を参照してください。

  • 次のインポート ステートメントは次のとおりです。

    import org.mongodb.scala._
    import scala.collection.JavaConverters._

MongoClientインスタンスは、データベースへの接続のプールを表します。 複数の同時操作を実行する場合でも、必要なインスタンスはMongoClientの 1 つだけです。

重要

通常、スタンドアロン配置、レプリカセット、シャーディングされたクラスターなどの特定の MongoDB 配置に対してMongoClientインスタンスを 1 つだけ作成し、アプリケーション全体でクライアントを使用します。 ただし、 インスタンスを複数作成する場合は、次の点に注意してください。

  • すべてのリソース使用量の制限(最大接続数など)は各MongoClientインスタンスに適用されます。

  • インスタンスを破棄するには、 MongoClient.close()メソッドを呼び出してリソースをクリーンアップします。

接続 URI は、ドライバが MongoDB 配置に接続するための指示のセットを提供します。このセットで、ドライバーに MongoDB への接続方法と接続中の動作を指示します。次の図は、サンプル接続 URI の各部分について説明しています。

プロトコル、認証情報、ホスト名または IP、ポート、および接続オプションを示す接続文字列の例

この例では、DNS SRV レコードを持つ Atlas MongoDB 配置に接続します。 詳細については、 DNS シードリスト接続形式のドキュメントを参照してください。 この形式を使うと、柔軟な配置が可能になるとともに、クライアントを再構成しなくてもサーバーをローテーションして変更することができます。

注意

MongoDB Atlasに配置している場合は、Atlas ドライバー接続ガイド Scalaを参照し、言語ドロップダウンから {3 を選択して接続string を取得します。

DNS SRV アドレスを持たないインスタンスまたはレプリカセットに接続する場合は、プロトコルに標準接続文字列形式を指定するmongodbを使用する必要があります。

パスワードベースの認証メカニズムを使用している場合は、プロトコルの後、接続文字列に認証情報が含まれます。user の値をユーザー名に、pass の値をパスワードに置き換えます。認証メカニズムで認証情報が必要ない場合は、接続 URI のこの部分を省略します。

接続 URI の次の部分では、ホスト名または IP アドレスを指定し、その後に MongoDB インスタンスのポートを指定します。この例では、sample.host はホスト名を表し、27017 はポート番号を表します。これらの値を置き換えて、MongoDB インスタンスを参照します。

接続 URI の最後の部分には、パラメータとして接続オプションが含まれます。 この例では、 maxPoolSize=20w=majorityの 2 つの接続オプションを設定しています。

次の接続スニペットを使用して、Atlas 上の MongoDB 配置への接続をテストできます。

import com.mongodb.{ServerApi, ServerApiVersion}
import org.mongodb.scala.{ConnectionString, MongoClient, MongoClientSettings}
import org.mongodb.scala.bson.Document
import scala.concurrent.Await
import scala.concurrent.duration.DurationInt
import scala.util.Using
object MongoClientConnectionExample {
def main(args: Array[String]): Unit = {
// Replace the placeholder with your Atlas connection string
val connectionString = "<connection string>";
// Construct a ServerApi instance using the ServerApi.builder() method
val serverApi = ServerApi.builder.version(ServerApiVersion.V1).build()
val settings = MongoClientSettings
.builder()
.applyConnectionString(ConnectionString(connectionString))
.serverApi(serverApi)
.build()
// Create a new client and connect to the server
Using(MongoClient(settings)) { mongoClient =>
// Send a ping to confirm a successful connection
val database = mongoClient.getDatabase("admin")
val ping = database.runCommand(Document("ping" -> 1)).head()
Await.result(ping, 10.seconds)
System.out.println("Pinged your deployment. You successfully connected to MongoDB!")
}
}
}

この接続スニペットは、Scala ドライバー v4.3 以降を使用して MongoDB Server v5.0 以降に接続するときに有効にできる Stable API 機能を使用します。 この機能を使用すると、Stable API でカバーされるコマンドの下位互換性の問題を心配することなく、ドライバーまたはサーバーを更新できます。

Stable API 機能の詳細については、サーバー マニュアルの「Stable API」を参照してください。

MongoDB のローカル配置には次の方法で接続できます。

  • ポート27017の localhost で実行されている MongoDB サーバーに接続するために、 パラメータなしでMongoClientオブジェクトをインスタンス化します。

    val mongoClient = MongoClient()
  • ポート27017の指定されたホストで実行されている MongoDB インスタンスに接続するには、 hostnameを明示的に指定します。

    val mongoClient = MongoClient("mongodb://host1")
  • hostnameportを明示的に指定します。

    val mongoClient = MongoClient("mongodb://host1:27017")

レプリカセットに接続するには、 MongoClient適用メソッドに 1 つ以上のノードを指定する必要があります。 レプリカセットの詳細については、サーバー マニュアルの「レプリケーション」を参照してください。

注意

MongoDB は、レプリカセット内の プライマリ ノードと セカンダリ ノードを自動検出します。

MongoDB レプリカセットに接続するには、 ConnectionStringでノードを指定します。

次の例では、レプリカセットの 3 つのノードを指定する方法を示しています。

val mongoClient = MongoClient("mongodb://host1:27017,host2:27017,host3:27017")

次の例は、レプリカセットのメンバーと、レプリカセット名とともにreplicaSetオプションを指定する方法を示しています。

val mongoClient = MongoClient("mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet")

次の例は、すべてのレプリカセット メンバーに対応するServerAddressインスタンスのリストを指定する方法を示しています。

val mongoClient = MongoClient(
MongoClientSettings.builder()
.applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(
new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017),
new ServerAddress("host3", 27017)).asJava))
.build())

シャーディングされたクラスターに接続するには、 mongosインスタンスまたは インスタンスをMongoClient適用メソッドに指定します。 シャーディングされたクラスターの詳細については、サーバー マニュアルの「 シャーディング 」を参照してください。

次の方法で、単一のmongosインスタンスに接続できます。

  • ConnectionStringでホスト名とポートを次のとおり指定します。

    val mongoClient = MongoClient( "mongodb://localhost:27017" )
  • mongoslocalhost:27017 で実行されている場合は、接続stringを除外します。

    val mongoClient = MongoClient()

次の方法で複数のmongosインスタンスに接続できます。

  • ホスト名とポートを含めるには、 ConnectionStringを指定します。

    val mongoClient = MongoClient("mongodb://host1:27017,host2:27017")
  • 各 インスタンスに対応するServerAddressオブジェクトのリストを指定します。

    val mongoClient = MongoClient(
    MongoClientSettings.builder()
    .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(
    new ServerAddress("host1", 27017),
    new ServerAddress("host2", 27017)).asJava))
    .build())

ConnectionStringまたはMongoClientSettingsのタイプ、またはその両方を使用して接続設定を指定できます。

たとえば、接続stringで TLS/SSL と認証設定を指定できます。

val mongoClient = MongoClient("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true")

また、 MongoClientSettingsインスタンスを使用して TLS/SSL を指定し、 MongoCredentialタイプを使用して認証情報を保存することもできます。

val user: String = // the user name
val source: String = // the source where the user is defined
val password: Array[Char] = // the password as a character array
// ...
val credential = MongoCredential.createCredential(user, source, password)
val mongoClient: MongoClient = MongoClient(
MongoClientSettings.builder()
.applyToSslSettings((builder: SslSettings.Builder) => builder.enabled(true))
.applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava))
.credential(credential)
.build())

場合によっては、接続stringをプログラムによる構成と組み合わせる必要がある場合があります。

val connectionString = ConnectionString("mongodb://host1:27107,host2:27017/?ssl=true")
val myCommandListener: CommandListener = ???
val mongoClient = MongoClient(
MongoClientSettings.builder()
.addCommandListener(myCommandListener)
.applyConnectionString(connectionString)
.build())

その他の接続機能を実装する方法については、次のチュートリアルを参照してください。

戻る

Tutorials