Overview
En esta guía, puedes aprender cómo utilizar bases de datos y colecciones de MongoDB con el controlador de MongoDB para Kotlin.
MongoDB organiza los datos en una jerarquía de los siguientes niveles:
Bases de datos: Las bases de datos son el nivel más alto de organización de datos en una instancia de MongoDB.
Colecciones: Las bases de datos se organizan en colecciones que contienen documentos.
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 Documentación del servidor sobre documentos.
Con el controlador MongoDB Kotlin, puede modelar los datos utilizando clases de datos de Kotlin o utilizando la clase Document para almacenar y recuperar datos de MongoDB.
Para obtener más información sobre el uso de clases de datos, consulta la guía sobre el Formato de datos Data clase. Para obtener más información sobre el uso de Document
clase, consulta la guía sobre el formato de datos del documento.
Acceder a una base de datos
Utilice el método getDatabase() en una MongoClient instancia 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")
Acceder a una colección
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 de un MongoDatabase que contiene documentos de tipo ExampleDataClass:
data class ExampleDataClass( val id: ObjectId = ObjectId(), val exampleProperty: String, )
val collection = database.getCollection<ExampleDataClass>("testCollection")
Tip
Si el nombre de la colección proporcionado no existe en la base de datos, MongoDB crea implícitamente la colección la primera vez que insertas datos en esa colección.
Especificar tipo de retorno
El controlador proporciona una manera de especificar una clase para los documentos devueltos por una colección, incluso si es diferente a la clase que se especificó al recuperar la colección. Puedes especificar una clase de retorno usando el MongoCollection.withDocumentClass() método.
Especificar una clase de retorno diferente podría ser útil en las siguientes situaciones:
Su colección contiene múltiples tipos de datos.
Especifica una proyección que cambia los campos de los datos.
No puedes especificar directamente un tipo de retorno en un método que cambia los datos, como
findOneAndUpdate()ofindOneAndReplace().
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 agrega un elemento al campo de arreglo seasons en el documento con un valor de name de "strawberry":
data class Fruit( 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( 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])
Crear una colección
Usa el método createCollection() de una instancia MongoDatabase para crear una colección en una base de datos de tu instancia conectada de MongoDB.
El siguiente ejemplo crea una colección llamada exampleCollection:
database.createCollection("exampleCollection")
Puedes especificar opciones de colección como tamaño máximo y reglas de validación de documentos utilizando la clase CreateCollectionOptions. El método createCollection() acepta una instancia de CreateCollectionOptions como segundo parámetro opcional.
Validación de documentos
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 sobre validación de documentos.
Obtén una lista de colecciones
Puedes query una lista de colecciones en una base de datos usando el MongoDatabase.listCollectionNames() método:
val collectionList = database.listCollectionNames().toList() println(collectionList)
[movies, exampleCollection]
Descarta una colección
Puedes remover una colección de la base de datos utilizando MongoCollection.drop() método:
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.
Descartar una base de datos
Puede remover una base de datos de su implementación de MongoDB utilizando MongoDatabase.drop() método, como se muestra en el siguiente ejemplo:
val database = mongoClient.getDatabase("testDatabase") database.drop()
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.
Descarta una base de datos solo si los datos que contiene ya no son necesarios.
Especificar preferencias de lectura, inquietudes de lectura y inquietudes de escritura
Las preferencias de lectura, los niveles de consistencia de lectura y los niveles de confirmación de escritura (write concern) controlan cómo el driver enruta las operaciones de lectura y espera el reconocimiento para las operaciones de lectura y escritura cuando está conectado a un conjunto de réplicas de MongoDB. Las preferencias de lectura y los niveles de consistencia de lectura se aplican a todas las operaciones de lectura; los niveles de confirmación de escritura (write concern) se aplican 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, consulta las siguientes páginas del manual del servidor: