2014-09-18 63 views
2

我是Mongo的新手,一直試圖組織部分數據庫的最佳方式。設想一個文檔構建程序,用戶通過從預定義的模板中選擇「段落」來組成文本文檔。我的問題是關於如何存儲模板結構;當用戶保存他們的文本文檔時,它是完全獨立和不復雜的。MongoDB設計 - 大型嵌套文檔,還是跨多個集合?

一個完整的'模板'可能看起來如下(簡化)。 :

{ 
    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」;以及關於單個項目的管理任務,「將5678分段的文本更新爲...」,「爲第7568部分創建新段落」。

我目前有兩個集合:

  • 模板 - 包含基本信息和部分陣列模板的文檔。
  • 段落 - 全段文件(包括嵌套子段等)。每個段落文檔都有一個引用模板文檔中某個節的_id的字段。

這是一個更明智的方法比擁有一個集合甚至更深的嵌套文檔更明智嗎?

如果我的問題沒有「答案」,一些好的資源將不勝感激。

感謝

回答

1

查看答案this question。在當前的mongo中,除非您明確知道子文檔的索引,否則不能更新數組中深層嵌套的子文檔。如果您計劃更新子文檔,您應該將它們分成不同的集合。

您可以將外鍵放在子文檔中並在其上搜索,但要注意當然Mongo沒有連接的概念,所以根據您以後如何需要數據,這可能會讓您咬住**。

據我所知在Mongo中這是一個開放的問題,開發人員正在處理這個問題。這裏是open ticket

+0

非常感謝,我沒有意識到這一點!我將重新評估數據將如何被需要,並從那裏去。 – 2014-09-21 22:05:06