Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Migrar do KMongo

Esta página contém uma comparação de alto nível da maioria das maneiras que o driver Kotlin oficial do MongoDB e o driver KMongo desenvolvido pela comunidade diferem. Você pode usar esta página para identificar as alterações que precisa fazer para migrar do driver KMongo obsoleto para o driver oficial Kotlin do MongoDB .

KMongo é uma biblioteca popular desenvolvida na comunidade para trabalhar com o MongoDB a partir de aplicativos Kotlin. É um wrapper em torno do driver Java que foi criado antes da criação do driver oficial do Kotlin para atender às necessidades da comunidade Kotlin .

Importante

A partir de julho de 2023, o KMongo foi marcado como obsoleto.

O driver Kotlin do MongoDB é o driver MongoDB oficialmente suportado e mantido para Kotlin. É desenvolvido pela equipe MongoDB.

Embora ambos os drivers ofereçam suporte a operações síncronas e assíncronas, os exemplos nesta página usarão operações assíncronas baseadas em coroutine.

O driver Kotlin é o driver oficial do MongoDB para o Kotlin. Ele é desenvolvido pela equipe do MongoDB e fornece uma API nativa para que aplicativos Kotlin se conectem ao MongoDB e trabalhem com dados. Ele é implementado envolvendo o driver Java do MongoDB.

KMongo é uma biblioteca popular desenvolvida na comunidade para trabalhar com o MongoDB a partir de aplicativos Kotlin. É um wrapper em torno do driver Java que foi criado antes da criação do driver oficial do Kotlin para atender às necessidades da comunidade Kotlin .

Importante

A partir de julho de 2023, o KMongo foi marcado como obsoleto.

O driver do Kotlin foi desenvolvido em colaboração com o criador do KMongo, Giulien Buret, para oferecer aos usuários um driver com suporte oficial.

O driver oficial do Kotlin e o KMongo têm API geralmente semelhantes. Semelhanças notáveis entre o driver Kotlin e o KMongo incluem:

  • Suporte para operações síncronas e baseadas em corrotina

  • Suporte usando classes de dados para representar documentos MongoDB

  • Suporte para serialização do KotlinX

  • Suporte para API CRUD do MongoDB e API de agregação

Embora o driver oficial do Kotlin e o KMongo sejam semelhantes, existem algumas diferenças principais:

  • O driver oficial não tem suporte integrado para react, rxjava,2 jacksonou gson.

  • O driver oficial não suporta comandos de shell do MongoDB.

Ambos os drivers permitem que você se conecte e se comunique com clusters do MongoDB a partir de um aplicativo Kotlin.

Para se conectar a um cluster MongoDB usando o driver MongoDB Kotlin :

import com.mongodb.kotlin.client.coroutine.MongoClient
data class Jedi(val name: String, val age: Int)
// Replace the placeholder with your MongoDB deployment's connection string
val uri = CONNECTION_STRING_URI_PLACEHOLDER
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("test")
// Get a collection of documents of type Jedi
val collection = database.getCollection<Jedi>("jedi")

Consulte a documentação Conectar ao MongoDB para obter mais informações.

Ambos os drivers oferecem suporte para todas as API CRUD do MongoDB e operações de agregação.

Dica

Se você está familiarizado com a construção de filtros de query usando a notação infixa disponível no KMongo, também pode usar essa notação para criar filtros no driver oficial do Kotlin usando métodos de extensão do pacote mongodb-driver-kotlin-extensions . Selecione a guia Kotlin Driver Extensions para visualizar um exemplo que usa essa sintaxe de consulta no driver Kotlin .

O driver Kotlin do MongoDB também fornece funções para todas as operações CRUD básicas:

// Insert a document
val jedi = Jedi("Luke Skywalker", 19)
collection.insertOne(jedi)
// Find a document
val luke = collection.find(Jedi::name.name, "Luke Skywalker")
val jedis = collection.find(lt(Jedi::age.name, 30)).toList()
// Update a document
val filter = Filters.eq(Jedi::name.name, "Luke Skywalker")
val update = Updates.set(Jedi::age.name, 20)
collection.updateOne(filter, update)
// Delete a document
val filter = Filters.eq(Jedi::name.name, "Luke Skywalker")
collection.deleteOne(filter)

Você pode construir agregação pipelines utilizando o método aggregate() e a função pipeline:

data class Results(val avgAge: Double)
val resultsFlow = collection.aggregate<Results>(
listOf(
Aggregates.match(Filters.ne(Jedi::name.name, "Luke Skywalker")),
Aggregates.group("\$${Jedi::name.name}",
Accumulators.avg("avgAge", "\$${Jedi::age.name}"))
)
)
resultsFlow.collect { println(it) }

Consulte a documentação de Operações e Agregação CRUD para obter mais informações.

Ambos os drivers oferecem suporte a query seguras por tipo usando referências de propriedade.

Dica

Se você está familiarizado com a construção de filtros de query usando a notação infixa disponível no KMongo, também pode usar essa notação para criar filtros no driver oficial do Kotlin usando métodos de extensão do pacote mongodb-driver-kotlin-extensions . Selecione a guia Kotlin Driver Extensions para visualizar um exemplo que usa essa sintaxe de consulta no driver Kotlin .

O driver Kotlin do MongoDB usa a API Builders para construir consultas. Alternativamente, você pode usar a classe Document.

data class Person(val name: String, val email: String, val gender: String, val age: Int)
data class Results(val email: String)
val collection = database.getCollection<Person>("people")
// Using Builders
val filter = and(eq("gender", "female"), gt("age", 29))
val projection = fields(excludeId(), include("email"))
val results = collection.find<Results>(filter).projection(projection)
// Using Document class
val filter = Document().append("gender", "female").append("age", Document().append("\$gt", 29))
val projection = Document().append("_id", 0).append("email", 1)
val results = collection.find<Results>(filter).projection(projection)

Para mapear uma query de string KMongo para o driver Kotlin, você pode usar a classe JsonObject .

val query = JsonObject("{\"name\": \"Gabriel Garc\\u00eda M\\u00e1rquez\"}")
val jsonResult = collection.find(query).firstOrNull()

Para obter mais informações, consulte a seguinte documentação do driver Kotlin:

Ambos os drivers suportam o uso de classes de dados Kotlin e a classe Document para modelar os dados armazenados em uma coleção MongoDB . A classe Document permite modelar dados representados em uma coleção MongoDB em um formato flexível.

Você pode usar classes de dados e classes Document para modelar dados com o MongoDB Kotlin Driver:

// With data class
data class Movie(val title: String, val year: Int, val rating: Float)
val dataClassCollection = database.getCollection<Movie>("movies")
val movieDataClass = dataClassCollection.findOneOrNull()
val movieNameDataClass = movieDataClass.title
// With Document class
val documentCollection = database.getCollection<Movie>("movies")
val movieDocument = documentCollection.findOneOrNull()
val movieTitleDocument = movieDocument.getString("title")

Ambos os drivers fornecem suporte para serializar e desserializar objetos de dados no Kotlin de e para o BSON.

Você pode serializar classes de dados no driver Kotlin usando codecs de classe de dados automáticos e a biblioteca kotlinx.serialization. O driver fornece um serializador Bson eficiente que lida com a serialização de objetos Kotlin para dados BSON.

@Serializable
data class LightSaber(
@SerialName("_id") // Use instead of @BsonId
@Contextual val id: ObjectId?,
val color: String,
val qty: Int,
@SerialName("brand")
val manufacturer: String = "Acme" // Use instead of @BsonProperty
)

Para saber mais, consulte a documentação de serialização do Kotlin .

Se você utilizar a classe Document para representar sua collection, você poderá serializá-la para JSON e EJSON utilizando o método .toJson() :

val document = Document("_id", 1).append("color", "blue")
// Serialize to JSON
document.toJson()
// Serialize to EJSON
val settings = JsonWriterSettings.builder().outputMode(JsonMode.STRICT).build()
val json = doc.toJson(settings)

Para saber mais sobre a serialização de dados com a classe Document , consulte Formato de dados do documento - documentação JSON estendida .

Ambos os drivers suportam operações síncronas e assíncronas.

O driver Kotlin do MongoDB também possui bibliotecas separadas para operações síncronas e assíncronas. No entanto, o driver Kotlin só tem suporte integrado para corrotinas como um paradigma assíncrono. Atualmente, o driver Kotlin do MongoDB não oferece suporte para outros paradigmas assíncronos, como Reactive Streams, Reactor ou RxJava2.

Driver
Pacote

sincronizar

com.mongodb.kotlin.client

Coroutines

com.mongodb.kotlin.client.coroutine

Diferentemente do KMongo, se você quiser escrever código assíncrono, só precisará importar o pacote relevante.

Para escrever código síncrono:

import com.mongodb.kotlin.client.MongoClient
// Instantiate your collection
data class Jedi(val name: String, val age: Int)
val uri = "<your-connection-string">
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("test")
val collection = database.getCollection<Jedi>("jedi")
// Synchronous operations
val jedi = Jedi("Luke Skywalker", 19)
collection.insertOne(jedi)

Para escrever código corrotina assíncrono:

import com.mongodb.kotlin.client.coroutine.MongoClient
// Instantiate your collection
data class Jedi(val name: String, val age: Int)
val uri = "<your-connection-string">
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("test")
val collection = database.getCollection<Jedi>("jedi")
runBlocking {
// Async operations
val jedi = Jedi("Luke Skywalker", 19)
collection.insertOne(jedi)
}

Agora que você leu as diferenças entre o KMongo e o driver MongoDB Kotlin, consulte o Início rápido para começar a usar o driver KMongo Kotlin.