Как использовать POJO с Quarkus и MongoDB в Kotlin

#mongodb #kotlin #find #pojo #quarkus

#mongodb #котлин #Найти #pojo #quarkus

Вопрос:

Я использую Quarkus и Kotlin, и мне нужно сохранять и извлекать документы из коллекции MongoDB.

Я определил класс данных:

 data class Result constructor(
    @BsonId
    val id: String? = null,
    val values: Map<String, Any> = mapOf()
)
 

StorageService имеет такой атрибут:

 private var collection: MongoCollection<Result>
 

Чтобы вставить результат, я определяю экземпляр класса и использую метод insertOne:

 val result = Result(id="exampleId", values=mapOf("one" to 1, "two" to 2))
...
collection.insertOne(result)
 

Это работает, и я вижу документ, хранящийся в коллекции, с правильным идентификатором.

Когда я выполняю поиск , он не работает:

 val result = collection.find(eq("_id", "exampleId")).first()

 

Дает println(result) :

Результат (id= null, значения ={})

Не могли бы вы сказать мне, где я делаю неправильно, пожалуйста?

Спасибо

Ответ №1:

Если вы не предоставляете свой собственный кодек для своих классов, будет использоваться кодек POJO.

Для работы с классами данных необходимо выполнить некоторые небольшие действия, это описано в руководстве MongoDB с Panache, даже если вы не используете MongoDB с Panache, он все равно будет применяться: https://quarkus.io/guides/mongodb-panache#working-with-kotlin-data-classes

Существует версия MongoDB для Kotlin с Panache, но она еще не задокументирована.