Overview
En esta guía, podrás aprender a utilizar tu Propiedades de la clasede datos directamente con las clases de generador disponibles en el controlador Kotlin Sync.
El driver de Kotlin Sync implementa extensiones que permiten referenciar las propiedades de la clase de datos al usar métodos de construcción en lugar de usar nombres de campos como string. Puedes estructurar tu código de esta manera para que tu código sea más seguro respecto a los tipos de datos y mejorar la interoperabilidad de tus aplicaciones en Kotlin.
La biblioteca de extensiones también permite crear consultas, actualizar documentos y escribir otras sentencias mediante notación infija. Para obtener más información sobre esta notación, consulte Notación infija en la documentación de referencia de Kotlin.
Nota
Esta página proporciona un número limitado de ejemplos de código para demostrar esta funcionalidad. Para obtener más información sobre el uso de clases de constructor, consulte la guía "Usar patrones de código de constructores".
Agrega extensiones de Kotlin a tu proyecto
Para implementar esta funcionalidad, se debe agregar el/la
mongodb-driver-kotlin-extensions dependencia a tu lista de dependencias.
Tip
Lista de Materiales
Recomendamos agregar el Registro de Materiales (BOM) del controlador JVM a tu aplicación para gestionar las versiones de los artefactos del controlador. Esto remueve la necesidad de especificar una versión para cualquier paquete individual cubierto por el BOM, simplificando la gestión de dependencias. Para obtener más información, consulte el paso Agregar la Lista de Materiales del Controlador de la guía de Introducción.
Seleccione una de las siguientes pestañas para ver cómo agregar la dependencia de extensión a su proyecto mediante el uso de Gradle y Maven gestores de paquetes:
Si usas Gradle para gestionar tus dependencias, añade lo siguiente a tu lista de dependencias de build.gradle.kts:
implementation("org.mongodb:mongodb-driver-kotlin-extensions")
Si usas Maven para gestionar tus dependencias, añade lo siguiente a tu lista de dependencias pom.xml:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-kotlin-extensions</artifactId> </dependency>
Después de instalar la dependencia de extensiones, puedes utilizar los métodos de extensión importando clases y métodos desde la ruta com.mongodb.kotlin.client.model. Puedes combinar el uso de estos métodos y los métodos estándar del generador en la misma aplicación, como se muestra en el ejemplo de Agregados en esta guía.
Desarrolladores Ejemplos
Esta sección contiene ejemplos que demuestran cómo utilizar las propiedades de la clase de datos directamente con los métodos de la clase constructora del paquete de extensiones.
Tip
Anotaciones de clases de datos
Cuando uses los métodos de clase del constructor de extensiones para las clases de datos, los métodos respetarán tus anotaciones de clase de datos de los paquetes bson-kotlin y bson-kotlinx. Para aprender más información sobre las anotaciones, consulte la sección Especificar la conversión de componentes usando anotaciones de la guía de Document Data Format: clases de datos.
Datos de muestra
Los ejemplos de esta sección utilizan documentos de la colección students que describen a alumnos en un colegio. Los documentos en la colección students están modelados por la siguiente clase de datos de Kotlin:
data class Student( val name: String, val teachers: List<String>, val gradeAverage: Double )
Filtros
Puedes usar los asistentes de la clase Filters desarrolladores para query las propiedades de las clases de datos.
El siguiente código muestra diferentes formas de utilizar métodos de extensión Filters para ejecutar queries en la clase de datos Student:
import com.mongodb.kotlin.client.model.Filters.eq import com.mongodb.kotlin.client.model.Filters.all
val student = Student( "Sandra Nook", listOf("Alvarez", "Gruber"), 85.7 ) // Equivalent equality queries Student::name.eq(student.name) eq(Student::name, student.name) Student::name eq student.name // Infix notation // Equivalent array queries all(Student::teachers, student.teachers) Student::teachers.all(student.teachers) Student::teachers all student.teachers // Infix notation
Indexes
Puedes utilizar asistentes de la clase Indexes desarrolladores para crear índices en las propiedades de la clase de datos.
El siguiente código muestra diferentes formas de usar los métodos de extensión Indexes para crear índices en la clase de datos Student:
import com.mongodb.kotlin.client.model.Indexes.ascending import com.mongodb.kotlin.client.model.Indexes.descending
val ascendingIdx = Indexes.ascending(Student::name) val descendingIdx = Indexes.descending(Student::teachers) val ascIdxName = collection.createIndex(ascendingIdx) val descIdxName = collection.createIndex(descendingIdx)
Proyecciones
Puedes utilizar los asistentes de la clase desarrolladores Projections para crear proyecciones de propiedades de data class.
El siguiente código muestra cómo utilizar los métodos de extensión de Projections para crear una proyección en la clase de datos Student:
import com.mongodb.kotlin.client.model.Projections.excludeId import com.mongodb.kotlin.client.model.Projections.fields import com.mongodb.kotlin.client.model.Projections.include
val combinedProj = fields( include(Student::name, Student::gradeAverage), excludeId() ) collection.find().projection(combinedProj)
Ordena
Puedes usar ayudantes de la clase desarrolladores Sorts para ordenar sobre las propiedades de tu clase de datos.
El siguiente código muestra cómo utilizar los métodos de extensión Sorts para crear diferentes tipos de ordenaciones en la clase de datos Student:
import com.mongodb.client.model.Sorts.orderBy import com.mongodb.kotlin.client.model.Sorts
val sort = orderBy( Sorts.descending(Student::gradeAverage), Sorts.ascending(Student::name) ) collection.find().sort(sort)
Updates
Puede utilizar los asistentes de la clase de desarrolladores Updates para realizar actualizaciones utilizando las propiedades de su clase de datos.
El siguiente código muestra cómo utilizar los métodos de extensión Sorts para crear diferentes tipos de ordenaciones en la clase de datos Student:
import com.mongodb.kotlin.client.model.Filters.gte import com.mongodb.kotlin.client.model.Updates.addToSet import com.mongodb.kotlin.client.model.Updates.combine import com.mongodb.kotlin.client.model.Updates.max
val filter = Student::gradeAverage gte 85.0 val update = combine( addToSet(Student::teachers, "Soto"), Student::gradeAverage.max(90.0) ) collection.updateMany(filter, update)
Agregados
Puedes usar asistentes de las clases de desarrolladores Aggregates y Accumulators para realizar agregaciones usando las propiedades de tu clase de datos.
El siguiente código muestra cómo utilizar los métodos de extensión Accumulators y los métodos asistentes Aggregates para realizar una agregación en la clase de datos Student:
import com.mongodb.client.model.Aggregates.group import com.mongodb.client.model.Aggregates.limit import com.mongodb.client.model.Aggregates.sort import com.mongodb.kotlin.client.model.Accumulators.avg
// Data class to store aggregation result data class Summary ( val average: Double ) val pipeline = listOf( // Sorts grades from high to low sort(Sorts.descending(Student::gradeAverage)), // Selects the top 3 students limit(3), // Calculates the average of their grades and stores value in a Summary instance group(null, avg(Summary::average, "\$${Student::gradeAverage.name}")) ) val result = collection.aggregate<Summary>(pipeline)