sql >> Base de Datos >  >> NoSQL >> MongoDB

Tutorial de MongoDB:Conexión a MongoDB en Scala

MongoDB tiene un amplio conjunto de controladores para muchos lenguajes de programación. En el siguiente tutorial, le mostraremos los diversos matices de la conexión a MongoDB utilizando su controlador Scala.

Instalación de controladores

El controlador Scala de MongoDB se puede agregar a su proyecto usando la siguiente dependencia -

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

También puede descargar el controlador MongoDB Scala desde su página de github.

Scala Driver for MongoDB, como Java, viene con varias clases para facilitar las conexiones a una instancia de MongoDB.

Scala Driver for MongoDB, como Java, viene con varias clases para facilitar las conexiones a una instancia de MongoDB. Haz clic para tuitear

Vayamos paso a paso:

Conexión

Se puede configurar una conexión a una instancia de MongoDB utilizando un cliente de Mongo. MongoClient es una clase que se puede usar para administrar conexiones a MongoDB. La forma más sencilla de crear una conexión sería mediante -

val client:MongoClient=MongoClient("<server1>:27017")

Las opciones como autenticación, número de puerto, etc. se pueden configurar en la cadena de conexión. Por ejemplo, una opción de conjunto de réplicas se puede configurar como /?replicaSet=rs0 . Para obtener una lista completa de opciones, visite Opciones de URI de cadena de conexión.

Alternativamente, se puede usar una clase MongoClientSettings() para controlar el comportamiento de un Mongo Client. Se puede usar una clase ClusterSettings para agregar configuraciones de clúster a la clase Mongoclientsettings. Una conexión simple usando estas tres clases puede ser la siguiente -

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)

La conexión utiliza de forma predeterminada  AsynchronousSocketChannel del JDK de su sistema. Si utiliza SSL o tiene una versión de JDK anterior a la 1.7, deberá utilizar Netty como se describe en la sección SSL.

SSL

Su conexión a MongoDB puede protegerse mediante SSL. Nuestra otra publicación de blog, "Asegurar clústeres con SSL", describe la importancia de SSL.

Para validar el certificado presentado por el servidor MongoDB, deberá agregar las autoridades de firma CA al almacén de confianza del sistema.

También deberá agregar propiedades para el controlador para usar una biblioteca Netty en lugar de AsynchronousSocketChannel para este propósito. Deberá descargar los jars de Netty y agregarlos a sus proyectos actuales, ya que la dependencia de Scala no los descarga. También necesitará las siguientes declaraciones de importación -

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

La conexión a MongoDB mediante SSL se puede realizar de la siguiente manera -

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

Si tiene problemas para conectarse al servidor, entonces el nombre de host en el certificado SSL de su servidor puede ser diferente al que especificó al crear el MongoClient. Puede deshabilitar esta configuración usando. .invalidHostNameAllowed(true) en su configuración Ssl.

Autenticación

Puede usar la clase MongoCredential para agregar credenciales a su MongoClientSettings. Un uso típico de la clase MongoCredentials será el siguiente:

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

Tenga en cuenta que cuando haya agregado más de un host en la configuración del clúster, puede agregar sus credenciales como una lista. Por ejemplo, puede agregar List(credential1,credential2).asJava para dos anfitriones.

Poniendo todo junto aquí está el código completo para conectarse a un conjunto de réplicas con SSL en Scala -

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()
}
}

Prueba de tu conexión

Las páginas de inicio del controlador Scala tienen ejemplos sobre cómo puede probar su conexión.

Referencias:

Comenzando con Scala usando MongoDB

API de Mongo Scala

Háganos saber si tiene algún problema para conectarse a MongoDB usando su controlador Scala. Ofrecemos opciones administradas para todas sus necesidades de MongoDB.