我正在将消息模块构建到一个现有的web应用程序中。我们将消息存储在mongo中,数据结构如下所示:
{
id: "",
inResponseToMessageId: ""
to: []
cc: []
bcc: []
subject: ""
body: ""
owners: [{id:4, status:"read", folder:"inbox"}, {id:1, status:'unread', folder:'inbox'}]
dateSent:
}客户端希望我们能够同时在会话视图和单例视图中显示消息。
我很难找到一个高效的查询
我可以修改数据结构,但是我需要这样做才能让它正常工作。
下面的是一些可能的解决方案,但它们似乎都不够用:
标准mongo、group或$group函数的问题是,当集合很大时,它的性能会很差。我们预计集合中将有数亿条消息。
发布于 2015-04-08 14:49:46
在你的信息上放一个threadId。
返回按消息线程分组的结果。
您可以通过线程找到以下消息:
db.messages.find({ "threadId" : id })我认为没有必要像$group操作符那样对它们进行分组。
用分页很好地工作。
按什么顺序对邮件进行分页?如果您在一个唯一的字段上有一个排序,分页工作得很好。如果保持毫秒精度,dateSent应该是唯一的,因此您可以对其进行分页。
// page 1
db.messages.find({ "threadId" : id }).sort({ "dateSent" : -1 }).limit(25)
// page 2
db.messages.find({ "threadId" : id, "dateSent" : { "$gt" : <25th date sent> } }).sort({ "dateSent" : -1 }).limit(25)按日期和主题分类。
谁按主题对信息进行排序?无论如何,如果您想按日期或主题顺序检索消息,这只是创建正确的索引的问题。根据您的需求,您可能会对客户端视图执行这种排序,在那里可能不需要让数据库对结果进行排序。客户端可以对返回的子集执行此操作。
https://stackoverflow.com/questions/29502302
复制相似问题