您如何为MongoDB中的电子邮件应用(如gmail)建模?你会建模Conversation
吗? Inbox
/ OutBox
?还是mail
?
由于
答案 0 :(得分:3)
Gmail使用标签概念(例如stackoverflow上的标签)。这意味着收件箱,发送邮件,已加星标等正常的电子邮件对象,只是标有指定的标签。因此,只有Email
和Labels
。
您可以使用label:inbox
或label: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
的嵌套集合中,否则添加到电子邮件集合中。