2014-02-11 46 views
0

我正在開發一個網站,其中每個用戶都有一些不同貨幣的餘額。在網站的整個生命週期中,我將定期添加新貨幣。MongoDB Mongoose動態字段

我試圖找出使用貓鼬來存放餘額的最佳方法。我目前的餘額是這樣的:

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

管理實施您的方法 - 爲建議歡呼! –