如何在消息传递数据库中获取最新消息? (反思数据库)

How to get most recent message in a messaging DB? (RethinkDB)

您好,我正在构建聊天消息系统,这是我第一次 reading/writing 访问数据库。我正在创建方法调用来检索此聊天所需的相关数据。与大多数聊天系统一样,我想要一个包含名称、最新消息以及与最新消息关联的 time/date 的消息的一般列表。单击该线程后,将显示相应的消息。我正在尝试调用数据库,但无法使用正确的命令获取最新消息。

这是一封邮件包含的内容:

{
   "_id":  "134a8cba-2195-4ada-bae2-bc1b47d9925a" ,
   "clinic_id": 1 ,
   "created": 1531157560 ,
   "direction":  "o" ,
   "number":  "14383411234" ,
   "read": true ,
   "text":  "hey hows it going"
}

发送和接收的每条消息都是这样发布的。我无法想出正确的命令来获取所有不同 "number" 的最新消息,因此对于 number x,我得到了相应的最新消息,而 number y ,我得到了它对应的最近消息。 "created" 是以UNIX 时间创建消息的时间。

这是我开始的:

检索所有线程号:

r.db('d2').table('sms_msg').between([1, r.minval], [1, r.maxval], {index:'clinic_number'}).pluck(['number']).distinct()

检索特定线程中的所有消息:

r.db('d2').table('sms_msg').getAll([1, "14383411234"], {index:'clinic_number'} )

检索所有不同线程的最近消息:

r.db('d2').table('sms_msg').filter()....???

非常感谢您的帮助!

对于任何数据库来说,这都是一个非常棘手的查询,通常涉及大量子查询。您可能需要考虑对其进行非规范化,为每个 number.

保留对另一个 table 中最后一个条目的引用

但基本上,使用您当前的方法,这可能有效(未经测试)但效率可能非常低:

r.table('sms_msg').orderBy(r.desc('created')).group('number').nth(0)

获取文档的 属性 的最低值通常很快,但是当你想要像这样的排序列表的整个文档时,根据我的经验,这是非常低效的。