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

时间:2018-07-16 17:18:21

标签: nosql rethinkdb

嗨,我正在构建一个聊天消息传递系统,并且是我第一次读/写数据库。我正在创建方法调用来检索此聊天所需的相关数据。与大多数聊天系统一样,我希望有一个消息的常规列表,其中包括名称,最新消息以及与最新消息相关的时间/日期。单击该线程后,将显示相应的消息。我正在尝试调用数据库,但是在使用正确的命令来获取最新消息时遇到了麻烦。

这是一条消息包含的内容:

{
   "_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()....???

某些帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

对于任何数据库而言,这都是一个非常棘手的查询,通常涉及许多子查询。您可能需要考虑对它进行规范化处理,并为每个number保留对另一个表中最后一个条目的引用。

但是,基本上,按照您当前的方法,这可能会起作用(未经测试),但效率可能很低:

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

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