具有抽象 class 集合的 Kotlin Kmongo 库

Kotlin Kmongo library with abstract class collection

我有这些模型

abstract class Message : Data
data class TextMessage(val m: String): Message
data class ImageMessage(val m: ByteArray): Message

我想通过摘要class消息

获得一个集合
database.getCollection<Message>

但它实际上是一个工具 class (TextMessage, ImageMes​​sage) 实例,具体取决于它的内容

when(val value = collection.findOne()) {
    is TextMessage -> {}
    is ImageMessage -> {}
}

怎么做?

KMongo 库有 3 个对象映射选项,您的解决方案将取决于所使用的选项。

By default, Jackson engine is used. You can use POJO Codec engine by adding a -native suffix to the artifactId, or Kotlinx Serialization by adding a -serialization suffix to the artifactId.

https://litote.org/kmongo/quick-start/#object-mapping-engine

根据使用的引擎,应用该引擎处理多态性的方式: