MongoDB设计 - 大型嵌套文档,还是分割成多个集合?

时间:2014-09-18 18:52:00

标签: mongodb database-design database

我是Mongo的新手,并且一直试图找出构建我数据库部分的最佳方法。想象一下一个文档构建程序,其中用户通过选择“段落”来编写文本文档。来自预定义的模板。我的问题是如何存储模板结构;当用户保存他们的文本文档时,它完全独立且不复杂。

完整的模板'看起来如下(简化)。 :

{
    description: 'Template 1',
    someOtherField: '',
    . . .
    sections: [
        {
            description: 'Section 1',
            paragraphs: [
                {
                    description: 'Paragraph A',
                    subparagraphs : [
                        {
                            text: 'This is some text',
                            optionalTexts: [
                                {
                                    text: 'This is optional'
                                },
                                . . more . .
                            ]
                        }
                        . . more . .
                    ]
                }
                . . more . .
            ]
        }
}

正如您所看到的,它们是相当嵌套的,并且可能包含大量数据。

我正在运行查询以实现"列出属于模板56" "的部分。给我段落对象第1234条及第34条;以及单个项目的管理任务,"将第5678项的文本更新为......" "为第7568条创建一个新段落。 "

我目前有两个系列:

  • 模板 - 包含基本详细信息和各个部分数组的模板文档。
  • 段落 - 完整段落文档(包括嵌套子图表等)。每个段落文档都有一个引用模板文档中某个部分的_id的字段。

这是一个比使用更深层嵌套文档的集合更明智的方法吗?

如果没有"答案"对我的问题,一些好的资源将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

查看this question的答案。在当前的mongo中,除非您明确知道子文档的索引,否则无法更新数组中深层嵌套的子文档。如果您计划更新子文档,则应该将它们分成单独的集合。

你可以将外键放在子文档中并搜索它们,但要注意Mongo没有连接的概念,所以根据你以后需要数据的方式,这可能会让你陷入困境*。

据我所知,这是Mongo的一个开放性问题,开发人员正在解决这个问题。这是open ticket