2012-02-27 69 views
3

哪種方法可以爲文檔,文檔本身或單獨的集合存儲元數據?mongo存儲文檔元數據

我與具有這樣的數據收集工作:

{ 
    status: { 
     joined: Date, 
     retired: [{ 
      on: Date, 
      comment: String, 
      reinstated: { 
       on: Date, 
       comment: String 
      } 
     }], 
     suspended: [{ 
      on: Date, 
      comment: String, 
      reinstated: { 
       on: Date, 
       comment: String 
      } 
     }], 
     //..... 

我需要保持一個日誌時,誰執行這些變化的,但我不知道我是否應該將元數據添加到每個元素或者擁有像Log這樣的集合。

// Log collection 
{ 
    by: UserId, 
    on: Date, 
    verb: String, 
    object: ObjectId, 
    comment: String 
} 

回答

1

我會存儲與文檔元數據幾個原因:

1.It會顯得更加自然,如果你保持文件和元數據一起。

2.當您加載文件,你可以方便exclude從文檔元數據,讓您的文檔亮時沒有元數據需要:

db.items.find({ }, { metadata : 0 }); 

3.You可以很容易使用分頁通過切片retrieve元數據:

db.items.find({}, {metadata:{$slice: [20, 10]}}) // skip 20, limit 10 

但是,保持在腦海中:

1.尺寸限制的文件是16 MB,因此,如果您計劃有很多metadat的更好地去分開收集。但是,我通常從嵌入開始,然後將數據遷移到單獨收集,如果它變大的話。 2.如果你需要顯示所有文件的某個地方的元數據(類似於網格),加載它,應用分頁等是一件痛苦的事情。

+0

所以,如果我想(作爲次要功能)使用元數據顯示來自各種集合(即用戶,供應商,客戶)的元數據歷史記錄,您是否建議擁有日誌收集和複製數據? – 2012-02-27 19:55:15

+0

我想如果你想要顯示元數據歷史記錄,有一個單獨的集合是有益的,但也保留最新的元數據嵌入在原始文檔中。 – Barrie 2012-03-05 19:49:01