nosql - 如何在消息传递数据库中获取最新消息?(重新思考数据库)
问题描述
嗨,我正在构建一个聊天消息系统,并且是我第一次读/写数据库。我正在创建方法调用来检索此聊天所需的相关数据。与大多数聊天系统一样,我想要一个包含名称、最新消息以及与最新消息关联的时间/日期的消息的一般列表。单击该线程后,将显示相应的消息。我正在尝试调用数据库,但无法使用正确的命令获取最新消息。
这是一条消息包含的内容:
{
"_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)
获取文档属性的最低值通常很快,但是当您想要像这样的排序列表的整个文档时,根据我的经验,这是非常低效的。
推荐阅读
- java - Java 计算 1*3*5*7*...* 给用户给定的 double
- android - onSwipeCompleted view dissapiers,有空白空间和刷卡不再起作用
- qt - 在 Qt Creator 中打开一个 Qt cmake 项目总是重新运行 cmake
- json - 发布到 Microsoft Teams 连接器 Webhook 时,消息可以保留多长时间?
- r - R:如何构造一个重复的单位矩阵
- javascript - 更改事件以检查任何表单元素的更改
- python - python、arduino和无毛MIDI之间的串行通信
- ecmascript-6 - VSC 中的 NodeJs、es6 调试问题
- vue.js - Vue js,axios:403错误的访问令牌,即使它是正确的
- python-3.x - 如何在 Python 中从 CSV 列中绘制频率