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

Hen*_*nry 6 data-modeling mongodb nosql

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

谢谢

And*_*ich 3

Gmail 使用标签的概念(如 stackoverflow 上的标签)。这意味着收件箱、发送邮件、加星标等普通的电子邮件对象,只是用指定的标签标记。所以,只有EmailLabels

label:inbox您可以使用 gmail 中的搜索(例如或 )来查看它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),
              ..
               }
     }
Run Code Online (Sandbox Code Playgroud)

当然我错过了一些东西,但我想从上面的模式开始并在将来如果需要的话添加更多功能是可以的。

更新:

对于“对话视图”,我想所有回复都会显示到嵌套集合Replies(我已经更新了我的架构)。逻辑如下:

收到新消息后,您需要检查是否已存在同名电子邮件(当然需要删除“Re”等),还需要检查收件人列表中已发送电子邮件的用户。如果上述条件成立,则只需将新电子邮件添加到嵌套集合,Replies否则添加到电子邮件集合。