MongoDB に接続する
項目一覧
このガイドでは、Scala ドライバーを使用して MongoDB に接続する方法について説明します。
実行中の MongoDB 配置に接続するには、 MongoClient()
メソッドを使用します。
重要
次の例では、 MongoClient
をインスタンス化する方法を網羅するものではありません。 コンフィギュレーション MongoClient
メソッドの完全なリストについては、 MongoClient API ドキュメントを参照してください。
注意
システム キープアライブ設定は、より短いタイムアウトで構成することを強くお勧めします。
詳細は、 「 TCP キープアライブ時間が MongoDB デプロイに及ぼす影響」を参照してください。 詳細については、サーバー マニュアル FAQ の質問と回答を参照してください。
前提条件
このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。
接続する実行中の MongoDB 配置。 たとえば、スタンドアロン配置に接続するには、実行中のスタンドアロン配置への アクセス権が必要です。
プロジェクトにインストールされたドライバー依存関係。 ドライバーをインストールする方法については、「 のインストール 」を参照してください。
次のインポート ステートメントは次のとおりです。
import org.mongodb.scala._ import scala.collection.JavaConverters._
MongoClient
MongoClient
インスタンスは、データベースへの接続のプールを表します。 複数の同時操作を実行する場合でも、必要なインスタンスはMongoClient
の 1 つだけです。
重要
通常、スタンドアロン配置、レプリカセット、シャーディングされたクラスターなどの特定の MongoDB 配置に対してMongoClient
インスタンスを 1 つだけ作成し、アプリケーション全体でクライアントを使用します。 ただし、 インスタンスを複数作成する場合は、次の点に注意してください。
すべてのリソース使用量の制限(最大接続数など)は各
MongoClient
インスタンスに適用されます。インスタンスを破棄するには、
MongoClient.close()
メソッドを呼び出してリソースをクリーンアップします。
接続URI
接続 URI は、ドライバが MongoDB 配置に接続するための指示のセットを提供します。このセットで、ドライバーに MongoDB への接続方法と接続中の動作を指示します。次の図は、サンプル接続 URI の各部分について説明しています。
この例では、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=20
とw=majority
の 2 つの接続オプションを設定しています。
MongoDB Atlas への接続
次の接続スニペットを使用して、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 のローカル配置への接続
MongoDB のローカル配置には次の方法で接続できます。
ポート
27017
の localhost で実行されている MongoDB サーバーに接続するために、 パラメータなしでMongoClient
オブジェクトをインスタンス化します。val mongoClient = MongoClient() ポート
27017
の指定されたホストで実行されている MongoDB インスタンスに接続するには、hostname
を明示的に指定します。val mongoClient = MongoClient("mongodb://host1") hostname
とport
を明示的に指定します。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" ) mongos
がlocalhost: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())
接続チュートリアル
その他の接続機能を実装する方法については、次のチュートリアルを参照してください。