Конструкция схемы коллекций Spring и monsodb

Друзья, у меня есть вопрос, как организовать и аннотировать мои сущности и конфигурацию данных весны для разных отношений?
У меня есть объекты User, Wallet и Balance с отношениями:

  • Один к одному: пользовательский кошелек <->
  • Один для многих: кошелек <-> Остатки

И я хотел бы иметь следующую схему внутри mongodb:

> db.users.findOne() { _id : ObjectID('UUUU'), name : 'Jason Statham' } > db.wallets.findOne() { _id : ObjectID('WWWW'), user : ObjectID('UUUU') balances : [ { currency: 'USD', balance: 100}, { currency: 'EUR', balance: 530.50 } ] } 
  • Кошелек должен содержать ссылку на пользователя по идентификатору объекта, а пользователь хранится в отдельной коллекции
  • Кошелек должен содержать остатки как встроенные объекты

Объекты:

 data class User(val id: String, val name: String) data class Wallet(val id: String, val user: User, val balances: List<Balance>) data class Balance(val currency: String, val balance: BigDecimal) 

Мой стек:

  • Котлин
  • Весенняя загрузка
  • пружинно-загрузка стартер-данные MongoDB-реактивный

Мои ожидания:

  • Я смогу получить Wallet UserId объявления UserId : fun getWalletByUserId(userId : String): Mono<Wallet> в ReactiveMongoRepository
  • Id автоматически присваивается при сохранении объектов
  • Wallet будет содержать ссылку ObjectID для User
  • Wallet будет содержать встроенную коллекцию Balance

Наконец я нашел решение. Вот мои классы данных:

 @Document data class User( @Indexed val name: String, @Id val id: String? = null ) @Document data class Wallet( @DBRef val user: User, val balances: List<Balance>, @Id val id: String? = null ) data class Balance(val currency: String, val balance: BigDecimal) 

Аннотации @DBRef сохраняют ссылку на ObjectId в коллекции пользователей. Вот пример объекта « Wallet в базе данных Mongo:

 > db.wallet.findOne() { "_id" : ObjectId("5a48cd1898318630f692508a"), "user" : DBRef("user", ObjectId("5a48cd1898318630f6925089")), "balances" : [ { "currency" : "USD", "balance" : "100" }, { "currency" : "EUR", "balance" : "200" } ], "_class" : "com.example.model.Wallet" } 
Intereting Posts
Выполнить функцию из строки? Библиотека Kotlin 'rxkotlin-0.21.0.jar' имеет неподдерживаемый формат. Обновите библиотеку или плагин Ошибка: ошибка преобразования байт-кода в dex: Причина: com.android.dex.DexException: несколько файлов dex определяют Lorg / jetbrains / anko / collections / CollectionsKt; Ошибка при использовании Glide с kotlin Имеет ли Kotlin метод-CALL ярлыки? Лучший способ обработки возвратов в предикате Исходный пользовательский посыльный объект Канал выхода из вентилятора / вентилятора в закрытии Отображение Firebase в Kotlin-Object не работает Как конвертировать стороннюю библиотеку Android в kotlin? java.lang.NoClassDefFoundError: kotlin.jvm.internal.Intrinsics – newApplication Факториал с использованием цикла `for` в Котлине Создание runnable / uber jar с maven из проекта, смешанного с Java и Kotlin Передача любого в массив в Котлин Можем ли мы достичь безопасности типа компиляции для объединения типов, которые мы не можем контролировать?