Docs Menu
Docs Home
/ /

Bases de datos y colecciones

En esta guía, puede aprender a interactuar con bases de datos y colecciones de MongoDB utilizando el controlador Scala.

MongoDB organiza los datos en una jerarquía de los siguientes niveles:

  • Bases de datos: Estructuras de datos de nivel superior en una implementación de MongoDB que almacenan colecciones.

  • Colecciones: Grupos de documentos de MongoDB. Son análogos a las tablas en bases de datos relacionales.

  • Documentos: Unidades que almacenan datos literales como cadenas, números, fechas y otros documentos incrustados. Para obtener más información sobre los tipos y la estructura de los campos de documento, consulte Guía dedocumentos en el manual de MongoDB Server.

Acceda a una base de datos llamando al getDatabase() método en una instancia MongoClient.

El siguiente ejemplo accede a una base de datos llamada "test_database":

val database = mongoClient.getDatabase("test_database")

Acceda a una colección llamando al método getCollection() en una instancia MongoDatabase.

El siguiente ejemplo accede a una colección llamada "test_collection":

val collection = database.getCollection("test_collection")

Tip

Si el nombre de la colección proporcionado aún no existe en la base de datos, MongoDB crea implícitamente la colección cuando se insertan datos en ella por primera vez.

Utilice el método createCollection() en una instancia MongoDatabase para crear explícitamente una colección en una base de datos.

El siguiente ejemplo crea una colección llamada "example_collection":

val createObservable = database.createCollection("example_collection")
Await.result(createObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

Puede especificar opciones de colección, como el tamaño máximo y las reglas de validación de documentos, pasando una CreateCollectionOptions instancia al createCollection() método. Para obtener una lista completa de parámetros opcionales, consulte la documentación del comando create en el manual de MongoDB Server.

Puede consultar una lista de colecciones en una base de datos llamando al método listCollections() de una instancia MongoDatabase.

El siguiente ejemplo enumera todas las colecciones en una base de datos:

val results = Await.result(database.listCollections().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
Iterable((name,BsonString{value='test_collection'}), (type,BsonString{value='collection'}), ... )
Iterable((name,BsonString{value='example_collection'}), (type,BsonString{value='collection'}), ... )

Para hacer un query para solo los nombres de las colecciones en la base de datos, lleva a cabo el método listCollectionNames() de la siguiente manera:

val results = Await.result(database.listCollectionNames().toFuture(), Duration(10, TimeUnit.SECONDS))
results.foreach(println)
test_collection
example_collection

Tip

Para obtener más información sobre cómo iterar sobre una instancia Future, consulte Utilice futuros para recuperar todos los resultados en la guía Datos de acceso desde un observable.

Puedes borrar una colección llamando al método drop() en una instancia de MongoCollection.

El siguiente ejemplo elimina la colección test_collection:

val deleteObservable = database.getCollection("test_collection").drop()
Await.result(deleteObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

Advertencia

Eliminar una colección borra todos los datos de la colección

Borrar una colección de la base de datos borra permanentemente todos los documentos y todos los índices dentro de esa colección.

Descartar una colección solo si los datos que contiene ya no son necesarios.

Puede eliminar una base de datos llamando al método drop() en una instancia MongoDatabase.

El siguiente ejemplo borra la base de datos test_database:

var database = mongoClient.getDatabase("test_database")
val deleteObservable = database.drop()
Await.result(deleteObservable.toFuture(), Duration(10, TimeUnit.SECONDS))

Advertencia

Borrar una base de datos borra todos los datos de la base de datos.

Borrar una base de datos borra permanentemente todas las colecciones, documentos e índices dentro de esa base de datos.

Elimine una base de datos solo si ya no necesita sus datos.

Puede controlar cómo el controlador enruta las operaciones de lectura configurando una preferencia de lectura. También puede controlar cómo el controlador espera la confirmación de las operaciones de lectura y escritura en un conjunto de réplicas configurando una preocupación de lectura y una preocupación de escritura.

De forma predeterminada, las bases de datos heredan esta configuración de la instancia MongoClient y las colecciones la heredan de la base de datos. Sin embargo, puede cambiar esta configuración en su base de datos mediante el método withReadPreference().

El siguiente ejemplo accede a una base de datos mientras especifica la preferencia de lectura de la base de datos como secondary:

val databaseWithReadPrefs =
mongoClient.getDatabase("test_database").withReadPreference(ReadPreference.secondary())

También puede cambiar la configuración de lectura y escritura de sus colecciones mediante el método withReadPreference(). El siguiente ejemplo muestra cómo acceder a una colección especificando la preferencia de lectura como secondary:

val collectionWithReadPrefs =
database.getCollection("test_collection").withReadPreference(ReadPreference.secondary())

Tip

Para ver los tipos de preferencias de lectura disponibles, consulte la documentación de la API.

Para obtener más información sobre la configuración de lectura y escritura, consulte las siguientes guías en el manual de MongoDB Server:

En MongoDB Server, puede aplicar etiquetas clave-valor a los miembros del conjunto de réplicas según el criterio que elija. Después, puede usar esas etiquetas para seleccionar uno o más miembros para una operación de lectura.

De forma predeterminada, el controlador de Scala ignora las etiquetas al elegir un miembro para leer. Para indicarle que prefiera ciertas etiquetas, pase una instancia TagSet al constructor ReadPreference y luego pase la instancia ReadPreference al constructor MongoClientSettings que usa para instanciar un MongoClient.

En el siguiente ejemplo de código, el conjunto de etiquetas pasado al constructor ReadPreference le indica al controlador Scala que prefiera las lecturas del centro de datos de Nueva York ('dc': 'ny') y recurra al centro de datos de San Francisco ('dc': 'sf'):

val tag1 = new Tag("dc", "ny")
val tag2 = new Tag("dc", "sf")
val tagSet = new TagSet(List(tag1, tag2).asJava)
val connectionString = ConnectionString("<connection string URI>")
val readPreference = ReadPreference.primaryPreferred(tagSet)
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.readPreference(readPreference)
.build()
val clientWithTags = MongoClient(mongoClientSettings)

Si varios miembros del conjunto de réplicas coinciden con la preferencia de lectura y los conjuntos de etiquetas que especifique, el controlador de Scala lee desde los miembros del conjunto de réplicas más cercanos, elegidos de acuerdo con su tiempo de ping.

Por defecto, el driver utiliza solo aquellos nodos cuyos tiempos de ping están dentro de los 15 milisegundos del nodo más cercano para las queries. Para distribuir las lecturas entre miembros con latencias más altas, utiliza el método localThreshold() dentro del bloque ClusterSettings.Builder proporcionado por el método applyToClusterSettings() de la clase MongoClientSettings.Builder. Alternativamente, incluye el parámetro localThresholdMS en tu cadena de conexión URI.

El siguiente ejemplo se conecta a una implementación de MongoDB que se ejecuta en localhost:27017 y especifica un umbral local de 35 milisegundos:

val connectionString = ConnectionString("mongodb://localhost:27017")
val mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.applyToClusterSettings(builder => builder.localThreshold(35, TimeUnit.MILLISECONDS))
.build()
val client = MongoClient(mongoClientSettings)

En el ejemplo anterior, el controlador Scala distribuye lecturas entre los miembros coincidentes dentro de 35 milisegundos del tiempo de ping del miembro más cercano.

Para aprender más sobre cualquiera de los tipos o métodos discutidos en esta guía, consulta la siguiente documentación de la API:

Volver

Configurar TLS

En esta página