嗨,我正在构建一个聊天消息传递系统,并且是我第一次读/写数据库。我正在创建方法调用来检索此聊天所需的相关数据。与大多数聊天系统一样,我希望有一个消息的常规列表,其中包括名称,最新消息以及与最新消息相关的时间/日期。单击该线程后,将显示相应的消息。我正在尝试调用数据库,但是在使用正确的命令来获取最新消息时遇到了麻烦。
这是一条消息包含的内容:
{
"_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()....???
某些帮助将不胜感激!
答案 0 :(得分:0)
对于任何数据库而言,这都是一个非常棘手的查询,通常涉及许多子查询。您可能需要考虑对它进行规范化处理,并为每个number
保留对另一个表中最后一个条目的引用。
但是,基本上,按照您当前的方法,这可能会起作用(未经测试),但效率可能很低:
r.table('sms_msg').orderBy(r.desc('created')).group('number').nth(0)
通常最快地获得文档属性的最低值,但是当您想要像这样的排序列表的整个文档时,根据我的经验,它效率很低。