Конструкция схемы коллекций 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
DigestUtils.md5Hex () генерирует неправильное значение хэша при передаче объекта String Плавная прокрутка в JavaFX TableView сигнал 7 (SIGBUS), код 2 (BUS_ADRERR) Миграция с Java 6 на Kotlin Всплывающее диалоговое окно завершения работы Kotlin после ввода «объекта». Плагин Android-плагинов жалуется на ошибку перевода Uncaught Вывод лямбда-типа Java не работает должным образом в Котлине Почему не будет код, который инициализирует свойство интерфейса переменной в компиляции блока init? Как рекурсивно перебирать атрибуты JsonObject? Kotlin: преобразовать большой список в подсписку заданного размера раздела DOM-манипуляция с Kotlin Javascript в проекте Eclipse Maven Kotlin: Используйте лямбда вместо функционального интерфейса? Множественная переменная let в Kotlin Проблемы с переходом от фрагментатора / MapFragment к supportfragmentManager / SupportMapFragment Ошибка при использовании объекта для реализации пустого списка