按索引数据库存储中的不同列排序并过滤

时间:2018-06-11 16:29:18

标签: javascript indexeddb

假设我有一个名为messages的对象存储库,其结构类似于

{
    "id": id, 
    "from": from, 
    "conversation": conversation, 
    "time": time,
    "text": text
}

除了text之外,一切都是数字。

如果我想阅读会话,那么我自然会通过运行store.index("conversation").openCursor(IDBKeyRange.only(conversation))得到一个游标,但我也希望返回的值按time排序,我该如何实现呢?

要添加的内容更多,对象商店的主键为ididtimefields越大。

2 个答案:

答案 0 :(得分:0)

如果您发布了一些您尝试过的代码,那么您可以更轻松地假设您的问题。

我将假设您查询数据库并获取返回的对象数组

这样的事情(假设日期的存储方式)

let conversation = [
  {"id": 1, "from":'from', "conversation":'conversation', "time": 1528735036499 },
  {"id": 3, "from":'from', "conversation":'conversation', "time":1528735087860},
  {"id": 4, "from":'from', "conversation":'conversation', "time":1528735111224},
  {"id": 2, "from":'from', "conversation":'conversation', "time": 1528735070207 }
]

let orderedConvo = conversation.sort((a, b) => a.time - b.time)

console.log(orderedConvo)

你应该在数组上使用.sort()并比较时间,目前它的排序最旧 - 如果你想要最新到最旧,只需切换到b.time - a.time

我特意订购了ID 1-4,以显示它们应该如何按时间排序。这是一个带有排序结果的可待因

https://codepen.io/anon/pen/yEMqxB?editors=0011

答案 1 :(得分:0)

嗯,也许试试这个:

  SetTransactionHandler(SqlProviderServices.ProviderInvariantName, () => new CommitFailureHandler());
    SetExecutionStrategy(SqlProviderServices.ProviderInvariantName, () => new SqlAzureExecutionStrategy(10, System.TimeSpan.FromSeconds(3)));

为什么我认为这有效,请参阅我对复合指数问题的其他答案