[go: up one dir, main page]

Internal mapper collection declaration

Ability to declare a collection with a class:

object Users : DbDocument {
    val _id by single<ObjectId>()
    val name by single<String>()
    val friends by array<Friends>()
}

object Friends : DbDocument {
    val name: String by field()
}

collection.findOne {
    Users.name eq "foo"
}

collection.findOne {
    Users.friends.any.name eq "bar"
}

Optionally, allow internal mappers:

object Users : DbDocument<User> {
    val _id by single<ObjectId>()
    val name by single<String>()
    val friends by array<Friends>()

    override fun mapTo(data: BsonFieldReader): User =
        User(
            name = data[Users.name],
            friends = data[Users.friends],
        )
  
    override fun BsonFieldWriter.mapFrom(user: User) {
        writeDocument {
            writeString(Users.name, user.name)
            writeString(Users.friends, user.friends)
        }
    }
}