2013-03-20 62 views
1

MongoDB文檔說增長數組很慢,應儘可能減少或消除它。我有子文檔的數組(比方說這些評論博客文章):在MongoDB中預先填充數組的正確方法是什麼?

comments = [ {name : "E.D.", date : "2013.03.20", text : "awesome stuff!"}, 
      {name : "J.L.", date : "2013.03.21", text : "tl;dr"} ] 

,它會相當可預見的增長,所以我認爲應該從一開始就對效率進行預填充。但我是否需要自己創建子文檔:

### I Version 
comments = [ { }, 
      { } ] 

還是僅僅用數字初始化數組就足夠了?

### II Version 
comments = [ 0, 
      0 ] 

(當然,我應該跟蹤多少意見實際上有遊客離開了。)

「註釋」可以達到幾KB大小,是否對文件造成任何影響增長?也許我應該創建與max允許的文本相同大小的佔位符?

### III Version 
comments = [ {name : "Name Surname", date : "1970.01.01", text : "this is a placeholder"}, 
      {name : "Name Surname", date : "1970.01.01", text : "this is a placeholder"} ] 

回答

0

預填充空散列或零無意義:當您插入真實數據時,文檔將展開。

你的第三個版本看起來更像它。儘管在插入真實評論時清除虛擬數據似乎並非微不足道。

您可以選擇性地將足夠大的文本塊插入特殊字段,並在註釋插入後將其刪除。類似這樣的:

db.posts.insert({ 
    comments: [], 
    padding: 'lorep ipsum ... x N' 
}) 


db.posts.update(query, 
       {$push: {comments: comment_data}, 
       $unset: padding}) 
相關問題