在Mongo中组织子文档的最佳方法是什么?

时间:2014-12-04 02:57:00

标签: mongodb mongoose database

我有一个我正在研究的项目,它要求我将大量对象存储在链接到父对象的数组中,类似于将社交媒体评论存储到其原始帖子中。对于组织子文档/注释数组的数据,最好的方法是什么?

将子对象置于不同的集合下并将其引用到其父对象是否被认为是最佳做法,或者将它们全部直接放在父对象中是否更为理想?

1 个答案:

答案 0 :(得分:0)

我在这里讨论一下,首先阅读: https://stackoverflow.com/a/27285313/68567

对于您的情况,选项3(保留主模型中的一些数据)可能是最好的。关键是避免无限制的阵列增长

这与Mongodb如何分配文档有关。 http://docs.mongodb.org/manual/core/storage/ " MongoDB中的每个文档都存储在一个记录中,该记录包含文档本身和额外的空间或填充,允许文档随更新而增长。"

当节点分配新文档时,它会根据插入文档的大小和集合中已有文档的大小来分配空间。 (请阅读上面的链接中的更多内容。)如果您的某些文档比其他文档大一个数量级,则可能会导致碎片化。

避免在您的评论中提供过多文档的方法。子文档数组使用$ push和$ slice命令。 http://docs.mongodb.org/manual/reference/operator/update/slice/

所以存储最近的5'并在项目首次加载时显示。 (或者最旧的,或者您想要使用的任何其他排序标准。)然后为用户提供一种加载更多的方法,这将对包含所有这些标准的集合进行单独的往返。