2014-02-11 4 views
0

각 사용자가 서로 다른 통화에 대해 다양한 잔액을 가지고있는 웹 사이트를 개발 중입니다. 웹 사이트의 평생 동안 정기적으로 새 통화를 추가합니다.MongoDB 몽구스 다이나믹 필드

나는 몽구스를 사용하여 저울을 저장하는 가장 좋은 방법을 찾아 내려고하고 있습니다. 나는 현재 다음과 같은 저울을 썼다 :

var UserSchema = new Schema({ 
    ... 
    balances: { 
     mck: { 
      type: Number, 
      default: 100.0, 
      addresses: String 
     }, 
     btc:{ 
      type: Number, 
      default: 10.0, 
      address: String 
     } 
    } 

}); 

그러나 그것은 최고의 접근 방식처럼 보이지 않는다. 새 통화를 추가 할 때마다 기존 문서에 해당 통화가 포함되지 않습니다. 데이터베이스와 스키마가 동기화되지 않은 문서를 허용하는 데에는 단점이 있습니까?

나는 이런 식으로 통화 및 각각의 균형을 저장하는 하위 문서를 사용하여 스키마가보다 역동적하게 생각 :

var BalanceSchema = new Schema({ 
    currency: String, 
    amount: Number, 
    address: String 
}); 

을하지만, 균형 등을 변경할 때 처리하는 콜백의 고통스러운 수있을 것

어떤 방법으로 접근하는 것이 가장 좋을까요? 아니면 놓친 다른 것이 있습니까?

+0

은 일반적으로 나중에 쿼리를 할 계획 얼마나 떨어져 구동된다. 또한 돈과 '숫자'에주의하십시오. 정밀도가 떨어질 수 있습니다. – WiredPrairie

답변

0

향후 통화를 동적으로 추가해야하는 경우 "잔액"을 배열로 선택해야합니다.

balances: [ 
    { 
    curr: "mck", 
    bal: 123,45 
    }, 
    { 
    curr: "btc", 
    bal: 42 
    } 
] 

그것은 미래 (like so)에서 쿼리 할 수 ​​있으며 각 문서와 당신 에게 많은 유연성을 제공합니다.

또는 왜 같은 평면 스키마 가지 : 필드가 저장되는 방법

{ 
user: "user1", 
currency1balance:54,76, 
currency5balance:1024 
} 
+0

거기에 매번 그들을 쿼리하는 것 이외의 균형을 액세스 할 수있는 쉬운 방법이 될 것 같습니다 - 이것은 내가 먼저 사용자를 쿼리 할 것을 의미하고 물건이 정말 지저분 해, 내가 몇 가지 글로벌 getBalance 기능을하지 않으면,하지만 난 돈이 없어 정말 그걸 원해. 클라이언트 측에서는 첫 번째 방법을 사용하여 잔액에 쉽게 액세스 할 수 있습니다. –

+0

위와 같은 평면 스키마는 어떻습니까? 각 사용자는 모든 통화에 대해 균형을 유지할 필요가 없습니다. – Jinxcat

+0

방법을 구현할 수 있습니다 - 조언을 구하는 것이 좋습니다! –