我一直在阅读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有帮助。
答案 0 :(得分:3)
我会将所有表单定义存储在一个集合中,并将表单提交存储在另一个集合中。您需要意识到一个文档(包括嵌入式文档)现在只能是16 MB。
将提交内容放在单独的集合中会更有意义。是否希望为您自己的每种表单类型提供不同的集合。这取决于每种形式的相似程度,以及您将获得多少种类型。
您不必担心MongoDB会在磁盘上创建非连续数据,因为Mongo会单独存储每个文档,而不关心哪些字段是文档的一部分。
答案 1 :(得分:0)
此外,将记录与表单定义一起存储会产生不必要的层次结构,这会让您在阅读适当级别的数据时感到痛苦。