Docs Menu
Docs Home
/ /
Corrutina de kotlin

Bases de datos y colecciones

En esta guía, puede aprender a utilizar bases de datos y colecciones de MongoDB con el controlador MongoDB Kotlin.

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

  1. Bases de datos: Las bases de datos son el nivel superior de organización de datos en una instancia de MongoDB.

  2. Colecciones: Las bases de datos están organizadas en colecciones que contienen documentos.

  3. Documentos: Los documentos contienen datos literales como cadenas, números y fechas, así como otros documentos incrustados. Para obtener más información sobre los tipos y la estructura de los campos de los documentos, consulte la documentación del servidor sobre documentos.

Con el controlador Kotlin de MongoDB, puede modelar datos mediante el uso de clases de datos Kotlin o mediante el uso de Document Clase para almacenar y recuperar datos de MongoDB.

Para obtener más información sobre el uso de clases de datos, consulte la guía en la Formato de datos de la clase de datos. Para obtener más información sobre el uso de la Document clase, consulte la guía sobre el formato de datos del documento.

Utiliza el método getDatabase() de una instancia MongoClient para acceder a una MongoDatabase en una instancia de MongoDB.

El siguiente ejemplo accede a una base de datos llamada testDatabase:

val database = client.getDatabase("testDatabase")

Utilice el método getCollection() de una MongoDatabase instancia para acceder a una MongoCollection en una base de datos de su instancia MongoDB conectada.

El siguiente ejemplo accede a una colección llamada testCollection desde un MongoDatabase que contiene documentos de tipo ExampleDataClass:

Modelo de datos ExampleDataClass
data class ExampleDataClass(
@BsonId val id: ObjectId = ObjectId(),
val exampleProperty: String,
)
val collection = database.getCollection<ExampleDataClass>("testCollection")

Tip

Si el nombre de la colección proporcionada aún no existe en la base de datos, MongoDB crea implícitamente la colección cuando usted inserta datos en esa colección por primera vez.

El controlador permite especificar una clase para los documentos devueltos de una colección, incluso si es diferente de la clase especificada al recuperar la colección. Puede especificar una clase de retorno mediante el método MongoCollection.withDocumentClass().

Especificar una clase de retorno diferente podría ser útil en las siguientes situaciones:

  • Su colección contiene múltiples tipos de datos.

  • Usted especifica una proyección que cambia sus campos de datos.

  • No se puede especificar directamente un tipo de retorno en un método que cambia los datos, como findOneAndUpdate() o findOneAndReplace().

El siguiente ejemplo recupera una colección que contiene datos representados por la clase de datos Fruit, pero devuelve el resultado de una operación findOneAndUpdate() como una instancia de la clase NewFruit. La operación cambia el nombre del campo qty a quantity y añade un elemento al campo de la matriz seasons del documento con un valor name de "strawberry":

Modelo de datos de frutas
data class Fruit(
@BsonId val id: Int,
val name: String,
val qty: Int,
val seasons: List<String>
)
val collection =
database.getCollection<Fruit>("fruits")
// Define a data class for returned documents
data class NewFruit(
@BsonId val id: Int,
val name: String,
val quantity: Int,
val seasons: List<String>
)
val filter = Filters.eq(Fruit::name.name, "strawberry")
val update = Updates.combine(
Updates.rename(Fruit::qty.name, "quantity"),
Updates.push(Fruit::seasons.name, "fall"),
)
val options = FindOneAndUpdateOptions()
.returnDocument(ReturnDocument.AFTER)
// Specify the class for returned documents as the type parameter in withDocumentClass()
val result = collection
.withDocumentClass<NewFruit>()
.findOneAndUpdate(filter, update, options)
println(result)
NewFruit(id=1, name=strawberry, quantity=205, seasons=[summer, fall])

Utilice el método createCollection() de una MongoDatabase instancia para crear una colección en una base de datos de su instancia MongoDB conectada.

El siguiente ejemplo crea una colección llamada exampleCollection:

database.createCollection("exampleCollection")

Puede especificar opciones de colección, como el tamaño máximo y las reglas de validación de documentos, mediante la clase CreateCollectionOptions. El createCollection() método acepta una instancia de CreateCollectionOptions como segundo parámetro opcional.

Lavalidación de documentos permite validar documentos con una serie de filtros durante las escrituras en una colección. Puede especificar estos filtros mediante la clase ValidationOptions, que acepta una serie de instancias de Filters que especifican las reglas y expresiones de validación:

val collOptions: ValidationOptions = ValidationOptions().validator(
Filters.or(
Filters.exists("title"),
Filters.exists("name")
)
)
database.createCollection(
"movies",
CreateCollectionOptions().validationOptions(collOptions)
)

Para obtener más información, consulte la documentación del servidor para la validación de documentos.

Puede consultar una lista de colecciones en una base de datos utilizando el método MongoDatabase.listCollectionNames():

val collectionList = database.listCollectionNames().toList()
println(collectionList)
[movies, exampleCollection]

Puede eliminar una colección de la base de datos utilizando el método MongoCollection.drop():

val collection =
database.getCollection<ExampleDataClass>("movies")
collection.drop()

Advertencia

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

Eliminar una colección de la base de datos también elimina permanentemente todos los documentos y todos los índices de esa colección. Elimine únicamente las colecciones que contengan datos que ya no sean necesarios.

Las preferencias de lectura, las preocupaciones de lectura y las preocupaciones de escritura controlan cómo el controlador enruta las operaciones de lectura y espera la confirmación de las operaciones de lectura y escritura al conectarse a un conjunto de réplicas de MongoDB. Las preferencias de lectura y las preocupaciones de lectura se aplican a todas las operaciones de lectura; las preocupaciones de escritura, a todas las operaciones de escritura.

MongoDatabase Las instancias heredan sus configuraciones de escritura, lectura y preferencia de escritura del MongoClient utilizado para crearlas. Las instancias MongoCollection heredan sus configuraciones de escritura, lectura y preferencia de escritura del MongoDatabase utilizado para crearlas. Sin embargo, puede usar los siguientes métodos para obtener una instancia de MongoDatabase o MongoCollection con una preferencia de lectura, lectura o escritura diferente a la configuración que heredarían normalmente:

Tip

Los métodos withReadConcern(), withReadPreference() y withWriteConcern crean una nueva instancia de un MongoDatabase o MongoCollection con la preferencia o inquietud deseadas. El MongoDatabase o MongoCollection en el que se llama al método conserva su configuración original de preferencias y preocupaciones.

Para obtener más información sobre estos temas, consulte las siguientes páginas del manual del servidor:

Volver

Solución de problemas de conexión

En esta página