2013-03-20 60 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}) 
相关问题