2017-12-28 7 views
0

친구, 내가 질문하는 방법을 구성하고 다른 관계 내 엔티티와 스프링 데이터 구성에 주석을해야? 관계와
I 한 사용자, 지갑 및 잔액 기관 :봄 데이터 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 } 
    ] 
} 
    : MongoDB를 내부에 다음 스키마를합니다 OBJECTID 및 사용자에 의한 사용자에 대한 참조를 포함해야합니다 (3210) 지갑은 분리 수거에 저장되어있는 내장 기관

엔티티로 균형을 포함해야

  • 지갑 :

    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의 반응

    내 기대는 다음과 같습니다 될 것 fun getWalletByUserId(userId : String): Mono<Wallet>ReactiveMongoRepository

  • Id에서 :

    • 내가 함수를 선언 UserId에 의해 Wallet를 가져올 수 있습니다 엔티티
    • 을 저장할 때
    • WalletUserObjectID 참조를 포함합니다 자동으로 할당
    • Wallet마지막으로 내가 해결책을 발견
  • 답변

    0

    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에 대한 참조를 저장합니다. 다음은 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" 
    }