Menu Docs
Página inicial do Docs
/ /

Formato de dados do documento: classes de dados

Neste guia, você pode aprender como armazenar e recuperar dados no MongoDB Kotlin Sync Driver usando classes de dados do Kotlin .

O driver suporta nativamente a codificação e decodificação de classes de dados Kotlin para operações de leitura e gravação do MongoDB usando o registro de codec padrão. O registro de codec padrão é uma coleção de classes chamadas codecs que definem como codificar e decodificar tipos de Kotlin e Java .

Os exemplos de código nesta seção referenciam a seguinte classe de dados de amostra, que descreve um dispositivo de armazenamento de dados:

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

Você pode inserir uma instância do DataStorage como mostrado no seguinte código:

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

Você pode recuperar documentos como instâncias DataStorage e imprimi-los como demonstrado no seguinte código:

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

Dica

Métodos de construtor e propriedades de classe de dados

Você pode usar os métodos de classes de construtores diretamente com propriedades de classe de dados adicionando a dependência opcional de extensões de driver do Kotlin Sync ao seu aplicação. Para saber mais e ver exemplos, consulte o guia Use Builders with Data Classes.

Você deve especificar uma classe para documentos retornados de uma coleta, mesmo que seja diferente da classe especificada ao recuperar a coleta.

O exemplo a seguir executa uma atualização no documento representado pela classe de dados DataStorage no exemplo anterior e retorna o documento atualizado como um tipo DataStorageAlt. A operação adiciona o campo releaseDate ao documento no qual o valor do campo name é 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 seção descreve as anotações que você pode utilizar para configurar o comportamento de serialização das classes de dados e fornece um exemplo para demonstrar o comportamento de anotação.

Você pode usar as seguintes anotações em classes de dados:

Nome da Anotação
Descrição

BsonId

Marca uma propriedade a ser serializada como a propriedade _id.

BsonProperty

Especifica um nome de campo de documento personalizado ao converter o campo de classe de dados para BSON.

BsonRepresentation

Especifica o tipo BSON que MongoDB utiliza para armazenar o valor. Utilize esta anotação somente quando você tiver que armazenar um valor como um tipo de BSON diferente da propriedade da classe de dados .

AVISO: seu código poderá lançar uma exceção se você incluir a BsonRepresentation anotação em uma propriedade que armazena como sendo do mesmo tipo que a propriedade da classe de dados.

Para saber mais sobre essas anotações de propriedade, consulte a documentação da API do pacote org.bson.codecs.pojo.annotations.

Os exemplos de código nesta seção referenciam a seguinte classe de dados de amostra, que descreve um dispositivo de rede:

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

Você pode inserir uma instância do NetworkDevice como mostrado no seguinte código:

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

O documento inserido no MongoDB é semelhante ao seguinte:

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

Você pode recuperar documentos como instâncias NetworkDevice e imprimi-los como demonstrado no seguinte código:

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

O driver suporta nativamente codificação e decodificação de classes de dados definidas recursivamente sem causar recursão de tempo de execução. Este suporte se estende a ciclos de vários tipos de classe de dados em definições de tipo. O seguinte código fornece um exemplo de um design de classe de dados recursivo:

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

Você pode executar operações de leitura e gravação em classes de dados definidas recursivamente da mesma maneira que faz com outras classes de dados. O seguinte código mostra como você pode executar uma operação de localizar em uma coleção de DataClassTree tipos:

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, ...))

Voltar

Digite Codecs

Nesta página