在indexedDB中,是否可以有效地等效“where in value(value1,value2 .... value2)”?

时间:2017-05-02 16:31:45

标签: html5 indexeddb

我想使用indexedDB实现此搜索:

where CustomerName in ('bob', 'fred'... 'nancy')

我可以看到两种可能性:

1)在对象存储上只需openCursor,然后遍历整个表,手动检查记录是否在('bob','fred'...'nancy')

2)使用索引,对索引openCursor('bob'),openCursor('fred')发出多次调用......

openCursor都取IDBKeyRange,这似乎不允许搜索多个非连续值

还有另一种更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

最快的方法可能是对您要搜索的键进行排序,在第一个键上打开一个光标IDBCursor.continue,直到您拥有该键的所有值,然后IDBCursor.advance到你正在寻找的下一把钥匙。重复,直到完成所有键。这样,您只需使用一个光标即可获得所有值,但您可以快速跳过您不关心的值。

答案 1 :(得分:0)

您的任何一项建议都有效。

#1的性能提升是首先对键列表进行排序(例如使用indexedDB.cmp()来实现比较功能),然后在第一个键上打开光标(例如' bob&#39 )。然后,当你进行迭代时,一旦你看到了关键词,那就是' bob'但在此之前#fred'你continue('fred')跳过介入的记录。这可以避免迭代您不关心的表中的记录。

最新的Chrome / Firefox / Safari也支持getAll(),这将是#2的变体,可以同时获取给定密钥的所有记录(例如,通过getAll('nancy')),而不必迭代一个游标。