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(我已经更新了我的架构)。逻辑如下:
收到新邮件后,您需要检查是否已经存在同名的电子邮件(当然需要删除“重新”等),还需要检查收件人列表中已发送电子邮件的用户。如果上述条件为真,则只需将新电子邮件添加到 Replies 的嵌套集合中,否则添加到电子邮件集合中。