正确的MongoDB文档设计

时间:2012-02-20 15:10:01

标签: php mongodb

我一直在阅读MongoDB的文档设计,特别是有关引用,嵌入和链接的文档设计。

我仍然不确定我希望存储的文件的最佳布局是什么。

想象一下,如果你愿意,一种动态表单构建应用程序。每个表单都有一组静态属性(名称,描述等),一组动态创建的字段(名称=文本,年龄=数字等),以及一组提交的结果。

这样的事情:

$obj = array(
    'name' => 'Test',
    'description' => 'Hello',
    'live' => false,
    'meta' => array (
        'name' => 'text',
        'age' => 'number',
        'sex' => 'boolean',
    ),
    'records' => array(
        array('name' => 'Test', 'age' => 20, 'sex' => true),
        ...
        ...
    )
);

我的困惑主要来自于我是否应该将记录嵌入集合中,或者是否应该为每个表单创建单独的集合。我的直觉是做后者,而我读过的MongoDB书籍表明嵌入数据是可以的。

鉴于我希望表单中包含大量提交的数据,否则有人可以提供帮助。

感谢。

修改 我还发现this question有帮助。

2 个答案:

答案 0 :(得分:3)

我会将所有表单定义存储在一个集合中,并将表单提交存储在另一个集合中。您需要意识到一个文档(包括嵌入式文档)现在只能是16 MB。

将提交内容放在单独的集合中会更有意义。是否希望为您自己的每种表单类型提供不同的集合。这取决于每种形式的相似程度,以及您将获得多少种类型。

您不必担心MongoDB会在磁盘上创建非连续数据,因为Mongo会单独存储每个文档,而不关心哪些字段是文档的一部分。

答案 1 :(得分:0)

此外,将记录与表单定义一起存储会产生不必要的层次结构,这会让您在阅读适当级别的数据时感到痛苦。