Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Formato de datos del documento: clases de datos

En esta guía, puedes aprender cómo almacenar y recuperar datos en el Driver MongoDB Kotlin Sync utilizando clases de datos de Kotlin.

El driver admite de forma nativa la codificación y decodificación de clases de datos de Kotlin para operaciones de lectura y guardado en MongoDB mediante el registro de códecs por defecto. El registro de códecs por defecto es una colección de clases llamadas códecs que definen cómo codificar y decodificar tipos de Kotlin y Java.

Los ejemplos de código en esta sección hacen referencia a la siguiente clase de datos de muestra, que describe un dispositivo de almacenamiento de datos:

data class DataStorage(val productName: String, val capacity: Double)

Puedes insertar un(a) DataStorage instancia como se muestra en el siguiente código:

val collection = database.getCollection<DataStorage>("data_storage")
val record = DataStorage("tape", 5.0)
collection.insertOne(record)

Puedes recuperar documentos como instancias DataStorage e imprimirlos como se muestra en el siguiente código:

val result = collection.find().firstOrNull()
println("${result}")
DataStorage(productName=tape, capacity=5.0)

Tip

Métodos de desarrolladores y propiedades de clases de datos

Puedes utilizar los métodos de las clases builder directamente con propiedades de la data class añadiendo la dependencia opcional de las extensiones Kotlin Sync Driver a tu aplicación. Para obtener más información y ver ejemplos, consulta la Guía Usar desarrolladores con Data Clases.

Debes especificar una clase para los documentos devueltos de una colección, incluso si es diferente de la clase que especificaste al recuperar la colección.

El siguiente ejemplo realiza una actualización en el documento representado por la clase de datos DataStorage en el ejemplo anterior y devuelve el documento actualizado como una instancia de tipo DataStorageAlt. La operación agrega el campo releaseDate al documento en el que el valor del campo name es tape:

// Define a data class for returned documents
data class DataStorageAlt(
val productName: String,
val capacity: Double,
val releaseDate: LocalDate
)
val filter = Filters.eq(DataStorage::productName.name, "tape")
val update = Updates.currentDate("releaseDate")
val options = FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
// Specify the class for returned documents
val newResult = collection
.withDocumentClass<DataStorageAlt>()
.findOneAndUpdate(filter, update, options)
println("Document after update:\n${newResult}")
Document after update:
DataStorageAlt(productName=tape, capacity=5.0, releaseDate=2025-01-24)

Esta sección describe las anotaciones que se pueden utilizar para configurar el comportamiento de serialización de las clases de datos y proporciona un ejemplo para demostrar el comportamiento de anotación.

Puedes utilizar las siguientes anotaciones en clases de datos:

Nombre de la anotación
Descripción

BsonId

Marca una propiedad para serializar como la propiedad _id.

BsonProperty

Especifica un nombre de campo de documento personalizado al convertir el campo de la clase de datos a BSON.

BsonRepresentation

Especifica el tipo BSON que MongoDB utiliza para almacenar el valor. Utiliza esta anotación solo cuando sea necesario almacenar un valor como un tipo BSON diferente al de la propiedad de la clase de datos.

ADVERTENCIA: Tu código podría lanzar una excepción si incluyes la anotación BsonRepresentation en una propiedad que almacenas como el mismo tipo que la propiedad de la clase de datos.

Para obtener más información sobre estas anotaciones de la propiedad, consulta la org.bson.codecs.pojo.annotations Documentación de la API del paquete.

Los ejemplos de código en esta sección hacen referencia a la siguiente clase de datos de muestra, que describe un dispositivo de red:

data class NetworkDevice(
@BsonId
@BsonRepresentation(BsonType.OBJECT_ID)
val deviceId: String,
val name: String,
@BsonProperty("type")
val deviceType: String
)

Puedes insertar una instancia de NetworkDevice como se muestra en el siguiente código:

val ntwkColl = database.getCollection<NetworkDevice>("network_devices")
val deviceId = ObjectId().toHexString()
val device = NetworkDevice(deviceId, "Enterprise Wi-fi", "router")
ntwkColl.insertOne(device)

El documento insertado en MongoDB se asemeja a lo siguiente:

{
"_id": {...},
"name": "Enterprise Wi-fi",
"type": "router"
}

Puedes recuperar documentos como instancias NetworkDevice e imprimirlos como se muestra en el siguiente código:

val annotatedClassResult = ntwkColl.find().toList()
println(annotatedClassResult)
[NetworkDevice(deviceId=..., name=Enterprise Wi-fi, deviceType=router)]

El driver admite de manera nativa la codificación y decodificación de clases de datos definidas recursivamente sin provocar recursividad en tiempo de ejecución. Esta compatibilidad se extiende a ciclos de múltiples tipos de clases de datos en definiciones de tipos. El siguiente código proporciona un ejemplo de un diseño de clase de datos recursivo:

data class DataClassTree(
val content: String,
val left: DataClassTree?,
val right: DataClassTree?
)

Puedes realizar operaciones de lectura y guardar en clases de datos definidas de manera recursiva de la misma manera que lo haces con otras clases de datos. El siguiente código muestra cómo puedes ejecutar una operación de búsqueda en una colección de tipos DataClassTree:

val treeColl = database.getCollection<DataClassTree>("language_trees")
val treeFilter = Filters.eq("left.left.right.content", "high german")
val treeResult = treeColl.find(treeFilter).firstOrNull()
println(treeResult)
DataClassTree(content=indo-european,
left=DataClassTree(content=germanic, left=DataClassTree(...)),
right=DataClassTree(content=romance, ...))

Volver

Type Codecs

En esta página