Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您将如何在MongoDB中为电子邮件应用程序建模?_Mongodb_Data Modeling_Nosql - Fatal编程技术网

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

您将如何在MongoDB中为电子邮件应用程序建模?,mongodb,data-modeling,nosql,Mongodb,Data Modeling,Nosql,你将如何在MongoDB中为电子邮件应用程序(如gmail)建模?你会模拟一个对话吗收件箱/发件箱?或邮件 感谢Gmail使用标签的概念(如stackoverflow上的标签)。这意味着收件箱、发送邮件、星号等普通电子邮件对象,只是用指定的标签标记。因此,只有电子邮件和标签 您可以使用gmail中的搜索功能查看它,如label:inbox或label:Starred 我想建议一个相当简单的设计,如下所示: Email { _id Title, Body

你将如何在MongoDB中为电子邮件应用程序(如gmail)建模?你会模拟一个
对话吗<代码>收件箱
/
发件箱
?或
邮件


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

您可以使用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),
              ..
               }
     }
当然,我遗漏了一些东西,但我想如果需要的话,可以从上面的模式开始,在将来添加更多的特性

更新:

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


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

发现了这一点,他们对电子邮件@Bugai13进行了建模:不,Henry谈到了“电子邮件线程”,即按主题对邮件进行分组(可能比“按主题分组”要复杂一些)。thx,你会在回复里写些什么?实际的邮件或_实际邮件的id?@Henry:是mongodb,嵌入,嵌入。。。因此,我会将实际邮件放入回复集合。回复它是与父级电子邮件相同的文档集合(mb除外,
回复
)。@Bugai哦,那么你真的是在模拟对话。怎么样将所有对话嵌入邮箱?这样太疯狂了吗?@Henry我也很难知道该嵌入什么。似乎我们正在处理的限制是文档大小。它有一个16mb的硬限制,但我猜如果你加载整个东西,15mb的邮箱会很慢。我见过有人建议每次谈话都收集一本书。我正在考虑如上所述的会话收集,但是您必须将每个会话限制为16mb(应该是合理的)。