2014-09-18 3 views
2

Я новичок в Mongo и пытаюсь найти лучший способ структурировать часть моей базы данных. Представьте себе программу создания документа, в которой пользователь составляет текстовый документ, выбрав «абзацы» из предварительно определенного шаблона. Мой вопрос только в том, как сохранить структуру шаблона; когда пользователь сохраняет свой текстовый документ, он полностью раздельный и некомплексный.MongoDB design - большой вложенный документ или разделен на несколько коллекций?

Полный «шаблон» может выглядеть следующим образом (упрощенный). :

{ 
    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 нет концепции объединений, поэтому в зависимости от того, как вам понадобятся данные позже, это может укусить вас в a **.

Насколько я знаю, это открытая проблема в Монго, которая отчасти обращается к разработчикам. Вот open ticket

+0

Большое спасибо, я этого не осознал! Я собираюсь переоценить, как данные будут необходимы и оттуда. –