Spring数据mongodb和集合模式设计

朋友,我有一个问题,如何组织和注释我的实体和弹簧数据配置为不同的关系?
我有关系的用户,钱包和余额实体:

  • 一对一:用户钱包
  • 一对多:钱包余额

我想在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 } ] } 
  • 电子钱包应该包含对ObjectID的引用,并且User被存储在单独的集合中
  • 电子钱包应包含作为嵌入实体的余额

实体:

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

我的堆栈是:

  • 科特林
  • 春季启动
  • 弹簧引导起动数据的mongodb反应

我的期望是:

  • 我可以通过UserId声明函数获取Walletfun getWalletByUserId(userId : String): Mono ReactiveMongoRepository fun getWalletByUserId(userId : String): Mono
  • 在保存实体时, Id将被自动分配
  • Wallet将包含对User ObjectID引用
  • Wallet将包含Balance嵌入式collections

最后我find解决办法。 这是我的数据类:

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

@DBRef注释保存对用户集合中ObjectId的引用。 这里是Mongo数据库里的Wallet实体的一个例子:

 > 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" }