Как получить id записи с Kmongo при чтение из коллекции?

Рейтинг: -1Ответов: 1Опубликовано: 05.06.2023

Я создал репозиторий MongoRepo, где при помощи функции create я добавляю новую запись типа E, но как получить id записи в функции read?

При этом я не могу изменить структуру функции или тип возвращаемого результата, или сохранить идентификатор во внешней переменной или списке. Нужно, чтобы именно в read функции был доступ к id записи из MongoDB — это возможно?

Мой репозиторий:

class MongoRepo<E>(private val collection: MongoCollection<E>) : Repo<E> {

    override fun create(element: E): Boolean {
        collection.insertOne(element)
        return true
    }

    override fun read(): List<Item<E>> {
        return collection.find().map { element ->
            val itemId = collection.find(Item<E>::elem eq element).toString()
            Item(itemId, element)
        }.toList()
    }

Я попытался использовать Document вместо E type, но это тоже не помогает, и я получаю ошибку сериализации.

Ответы

▲ 0
class MongoRepo<E>(private val collection: MongoCollection<E>) : Repo<E> {

    override fun create(element: E): Boolean {
        collection.insertOne(element)
        return true
    }

    override fun read(): List<Item<E>> {
        val idsDocuments = collection.withDocumentClass<Document>().find().distinct()
        return collection.find().mapIndexed { index, element ->
            val itemId = idsDocuments[index].values.elementAt(0).toString()
            Item(itemId, element)
        }.toList()
    }

Я кастанул коллекцию к документу и нашел айди