如何在消息传递数据库中获取最新消息? (反思数据库)
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)
获取文档的 属性 的最低值通常很快,但是当你想要像这样的排序列表的整个文档时,根据我的经验,这是非常低效的。
您好,我正在构建聊天消息系统,这是我第一次 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
.
但基本上,使用您当前的方法,这可能有效(未经测试)但效率可能非常低:
r.table('sms_msg').orderBy(r.desc('created')).group('number').nth(0)
获取文档的 属性 的最低值通常很快,但是当你想要像这样的排序列表的整个文档时,根据我的经验,这是非常低效的。