sql >> データベース >  >> NoSQL >> MongoDB

MongoDBチュートリアル:ScalaでのMongoDBへの接続

    MongoDBには、多くのプログラミング言語用の広範なドライバーセットがあります。次のチュートリアルでは、Scalaドライバーを使用してMongoDBに接続する際のさまざまなニュアンスを示します。

    ドライバーのインストール

    MongoDBのScalaドライバーは、次の依存関係を使用してプロジェクトに追加できます-

    <dependencies>
    <dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-scala-driver</artifactId>
    <version>1.0.1</version>
    </dependency>
    </dependencies>
    

    MongoDBScalaドライバーはgithubページからダウンロードすることもできます。

    Javaと同様にMongoDB用のScalaドライバーには、MongoDBインスタンスへの接続を容易にするための複数のクラスが付属しています。

    Javaと同様にMongoDB用のScalaドライバーには、MongoDBインスタンスへの接続を容易にするための複数のクラスが付属しています。クリックしてツイート

    これを段階的に進めましょう:

    接続

    MongoDBインスタンスへの接続は、Mongoクライアントを使用してセットアップできます。 MongoClientは、MongoDBへの接続を管理するために使用できるクラスです。接続を作成する最も簡単な方法は、-

    を使用することです。
    val client:MongoClient=MongoClient("<server1>:27017")

    接続文字列には、認証、ポート番号などのオプションを設定できます。たとえば、レプリカセットオプションは/?replicaSet=rs0として設定できます。 。オプションの完全なリストについては、接続文字列URIオプションにアクセスしてください。

    または、MongoClientSettings()クラスを使用して、Mongoクライアントの動作を制御することもできます。 ClusterSettingsクラスは、Mongoclientsettingsクラスにクラスター設定を追加するために使用されます。これらの3つのクラスを使用した簡単な接続は、次のようになります-

    val clusterSettings: ClusterSettings=ClusterSettings.builder()
    .hosts(List(newServerAddress("mongodb2.example.com:27345")
    ,newServerAddress("mongodb1.example.com:20026")).asJava).build()
    val settings: &lt;MongoClientSettings=MongoClientSettings.builder()
    .clusterSettings(clusterSettings)).build()
    val mongoClient: MongoClient=MongoClient(settings)

    デフォルトでは、接続はシステムJDKのAsynchronousSocketChannelを使用します。SSLを使用している場合、または1.7より前のJDKバージョンを使用している場合は、SSLセクションで説明されているようにNettyを使用する必要があります。

    SSL

    MongoDBへの接続は、SSLを使用して保護できます。他のブログ投稿「SSLでクラスターを保護する」では、SSLの重要性について説明しています。

    MongoDBサーバーによって提示された証明書を検証するには、署名機関CAをシステムのトラストストアに追加する必要があります。

    この目的でAsynchronousSocketChannelの代わりにNettyライブラリを使用するには、ドライバーのプロパティも追加する必要があります。 Scalaの依存関係ではダウンロードされないため、Netty jarをダウンロードして、現在のプロジェクトに追加する必要があります。次のインポートステートメントも必要になります-

    import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings}

    SSLを使用したMongoDBへの接続は、次のように行うことができます-

    val settings: MongoClientSettings=MongoClientSettings.builder()
    .clusterSettings(clusterSettings)
    .sslSettings(SslSettings.builder().enabled(true).build())
    .streamFactoryFactory(NettyStreamFactoryFactory()).build()
    
    >

    サーバーへの接続に問題がある場合は、サーバーのSSL証明書のホスト名が、MongoClientの構築時に指定したものと異なる場合があります。を使用して、この設定を無効にできます。 .invalidHostNameAllowed(true) SslSettingsで。

    認証

    MongoCredentialクラスを使用して、MongoClientSettingsにクレデンシャルを追加できます。 MongoCredentialsクラスの一般的な使用法は、次のとおりです-

    val settings: MongoClientSettings = MongoClientSettings.builder()
    .clusterSettings(clusterSettings).credentialList(credential)
    .sslSettings(SslSettings.builder().enabled(true).build())
    .streamFactoryFactory(NettyStreamFactoryFactory())
    .build()

    クラスタ設定に複数のホストを追加した場合は、資格情報をリストとして追加できることに注意してください。たとえば、List(credential1,credential2).asJava 2つのホストの場合。

    ここにすべてをまとめると、ScalaでSSLを使用してレプリカセットに接続するための完全なコードになります-

    import com.mongodb.MongoCredential
    import org.mongodb.scala.bson.collection.mutable.Document
    import org.mongodb.scala.{Completed, FindObservable, MongoClient, MongoClientSettings, MongoCollection, MongoDatabase, Observable,Observer, ReadPreference, ServerAddress}
    import org.mongodb.scala.connection.ClusterSettings
    import com.mongodb.MongoCredential._
    import java.util.logging.{Level, Logger}
    import org.mongodb.scala.connection.{NettyStreamFactoryFactory,SslSettings}
    import scala.collection.JavaConverters._
    objectnewworld {
    def main(args: Array[String]): Unit = {val mongoLogger: Logger = Logger.getLogger("com.mongodb")
    mongoLogger.setLevel(Level.SEVERE);
    val clusterSettings: ClusterSettings = ClusterSettings.builder().hosts(List(new ServerAddress("example.com:27345"), new ServerAddress("example.com:20026")).asJava).build()
    val user: String = "testuser"
    val databasename: String = "scalatest"
    val password: Array[Char] = "<enter-a-password>".toCharArray
    val credential: MongoCredential = createCredential(user, databasename, password)
    val settings: MongoClientSettings = MongoClientSettings.builder()
    .clusterSettings(clusterSettings).credentialList(List(credential,credential).asJava).sslSettings(SslSettings.builder().enabled(true).build())
    .streamFactoryFactory(NettyStreamFactoryFactory()).build()
    val mongoClient: MongoClient = MongoClient(settings)
    val database: MongoDatabase = mongoClient.getDatabase("scalatest")
    mongoClient.close()
    }
    }

    接続のテスト

    Scalaドライバーのスタートページには、接続をテストする方法の例があります。

    参照:

    MongoDBを使用してscalaを使い始める

    Mongo Scala API

    Scalaドライバーを使用してMongoDBに接続する際に問題が発生した場合は、お知らせください。 MongoDBのすべてのニーズに対応するマネージドオプションを提供します。


    1. MongoDBを使用したSpringDataReactive Repositories

    2. PyMongo 3がServerSelectionTimeoutErrorを発生させるのはなぜですか?

    3. node.js用のブロッキングredisライブラリはありますか?

    4. mongoDBでの更新による集約