这是我们留言文件的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条消息?
答案 0 :(得分:1)
我认为你的模型非常好。通常建议使用更多嵌入(例如:有conversations
集合,其中messages
是子文档),但我认为您的模型运行良好。为了更好地消除歧义,我会使用recipient
和sender
,而不是recipient
和from
。
获取发送给$ 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);