刀枪不入的茶壶 · matplotlib使用指南 - ...· 6 月前 · |
卖萌的毛巾 · java正则表达式开头结尾_mob64ca1 ...· 11 月前 · |
苦恼的羊肉串 · 【技巧】如何快速按照日期分组-腾讯云开发者社 ...· 1 年前 · |
一身肌肉的稀饭 · EXCEL---处理数组,拆分为多列,统计元 ...· 1 年前 · |
坚强的大象 · gRPC Keepalive ...· 1 年前 · |
我有一个带有“时间戳”和"chat_id“字段的对象存储”消息“。我想在这个按“时间戳”字段排序的对象存储中获取所有的“聊天”。据我所见,我不能只用IndexedDB做这件事。
我可以这样使用WebDatabase:
SELECT * FROM messages GROUP BY chat_id ORDER BY timestamp
在IndexedDB中:
我说错了吗?是否可以在IndexedDB中对分组选择进行排序?
UPD:我想让所有的聊天按chat_id“分组”,并根据时间戳对所选内容进行排序。所以最新的谈话将是第一次。
正如您所说,可以在indexedDB中对分组选择进行排序。但从你的问题中还不完全清楚你在问什么(至少对我来说是这样)。
尝试使用“时间戳”、“chat_id”,然后只使用next/prev,而不是next唯一/prevunique。您希望按照要在游标上迭代的顺序对索引字段进行排序。如果要按时间排序,则将时间戳作为第一个字段。事实上,这应该具有先按时间排序然后再按聊天id排序的效果。当然,这意味着您将在同一时间收到来自不同地方的不同聊天的消息。
如果具有相同聊天id的消息必须是连续的,那么只需使用'next‘和cursor.continue,然后继续使用' chat _id’、‘时间戳’。迭代时,只需检查chat_id是否与上一次迭代发生了更改,以查看是否开始了新的聊天。
还不清楚您为什么在这里使用not唯一。如果没有两条具有相同聊天id的消息也可以具有相同的时间戳,index唯一只会遍历整个索引/存储。几乎每个键在索引中都是唯一的,所以这是没有意义的。
为了澄清,您希望首先从包含具有最低时间戳的消息的chat_id中发出所有消息,然后是包含消息的chat_id的所有消息(到目前为止尚未看到)--下一个最低时间戳,等等?
在这里,索引DB没有提供任何特别有用的东西。
一个简单的方法将使用两个索引:一个在时间戳上,一个在chat_id上。
chat_id
位于set 中
continue()
光标
1. Otherwise:
1. add `chat_id` to _set_
2. open a cursor on the chat\_id index with `IDBKeyRange.only(chat_id)` as bounds
3. fetch all the records
您可以使用JsStore执行indexeddb中的组by、order或几乎所有类型的sql查询。它提供了与sql完全相同的api。
因此,假设您在sql中的查询是-
SELECT * FROM messages GROUP BY chat_id ORDER BY timestamp
在JsStore,它将是-
var Connection = JsStore.Instance('Db_name');
Connection.select({
From: 'messages',
GroupBy:'chat_id',
Order:{
By:'timestamp'
OnSuccess:function(results){