您将如何在MongoDB中建模电子邮件应用程序?

时间:2011-04-05 22:06:46

标签: mongodb data-modeling nosql

您如何为MongoDB中的电子邮件应用(如gmail)建模?你会建模Conversation吗? Inbox / OutBox?还是mail

由于

1 个答案:

答案 0 :(得分:3)

Gmail使用标签概念(例如stackoverflow上的标签)。这意味着收件箱,发送邮件,已加星标等正常的电子邮件对象,只是标有指定的标签。因此,只有EmailLabels

您可以使用label:inboxlabel:Starred等gmail中的搜索来查看。

我想建议一个相当简单的设计:

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(我已更新我的架构)。逻辑如下:

收到新邮件后,您需要检查是否已存在具有相同名称的电子邮件(确实需要删除“重新”等)。还需要检查已在收件人列表中发送电子邮件的用户。如果上述条件为真,则只需将新电子邮件添加到Replies的嵌套集合中,否则添加到电子邮件集合中。