如何在收件箱邮件的数据模型中添加回复/对话模式?

时间:2014-12-26 20:03:23

标签: mongodb

这是我们留言文件的json

{ recipient: 5485ef86028950a880f7f878,
  from: 5485ef86028950a880f7f878,
  message: 'Hello! Thank you for looking at my question on StackOverflow!',
  date: Tue Dec 23 2014 16:24:08 GMT-0600 (CST),
  _id: 5499eb8814615b66212018bb }

要查看收件箱,我会查询{recipient:id}并获取该人的所有邮件。当用户点击邮件时,我希望它能够打开一个对话,在该对话中查询按日期排序的每封邮件{from:sender}和{recipient:logged in user}。我的问题是,是否有任何特定的方式对此进行建模,以便回访和第四次,或者我这样做是对吗?

我想我刚刚描述了你如何获得两个用户和第四个用户的完整对话历史记录,但是如何获得一个收件箱,其中只显示来自向您发送邮件的每个人的最新邮件?

当您查看对话时,您如何仅在对话中加载最近的50条消息?

1 个答案:

答案 0 :(得分:1)

我认为你的模型非常好。通常建议使用更多嵌入(例如:有conversations集合,其中messages是子文档),但我认为您的模型运行良好。为了更好地消除歧义,我会使用recipientsender,而不是recipientfrom

获取发送给$ user的100条最新消息:

db.msgs.find({recipient: $user}).sort({date: -1}).limit(100);

获取整个对话,按最旧到最新排序:

db.msgs.find({"$or":[
    {recipient: $user, from: $from},
    {recipient: $from, from: $user}
]}).sort({date: 1});

获取对话中的最后50条消息:

db.msgs.find({"$or":[
    {recipient: $user, from: $from},
    {recipient: $from, from: $user}
]}).sort({date: -1}).limit(50);