Как бы вы смоделировали приложение электронной почты в MongoDB? - PullRequest
6 голосов
/ 06 апреля 2011

Как бы вы смоделировали почтовое приложение (например, gmail) в MongoDB?Будете ли вы моделировать Conversation?Inbox / OutBox?или mail?

Спасибо

1 Ответ

3 голосов
/ 06 апреля 2011

Gmail использует концепцию меток (например, теги в stackoverflow).Это означает, что входящие, отправка почты, помеченные и т. Д. Обычный объект электронной почты, просто помечены указанной меткойИтак, есть только Email и Labels.

. Вы можете увидеть это, используя поиск в gmail, например label:inbox или label:Starred.

. Я хотел бы предложить довольнопростой дизайн, подобный следующему:

Email
    {
      _id
      Title,
      Body,
      Status {read, unread},
      Labels { name, type(system, custom) },
      Replies {...},
      ..
    }

Labels
    {
      _id,
      name,
      settings {
              ShowInLabelsList (show, hide, showIfUnread),
              ShowInMessageList (show, hide),
              ..
               }
     }

Конечно, я что-то пропустил, но я думаю, что можно начинать с приведенной выше схемы и добавлять дополнительные функции в будущем, если потребуется.

Обновление:

Для «Представления беседы», я думаю, все показанные ответы перейдут во вложенную коллекцию Replies (я обновил свою схему).Логика следующая:

После того, как вы получили новое сообщение, вам необходимо проверить, существует ли уже электронное письмо с тем же именем (наверняка нужно удалить «Re» и т. Д.), А также проверить того пользователя, который отправиладрес электронной почты в списке получателей.Если вышеприведенные условия выполняются, просто добавьте новое письмо во вложенную коллекцию Replies, в противном случае добавьте в коллекцию писем.

...