Indexeddb:使用通配符搜索

时间:2012-03-20 16:47:25

标签: javascript indexeddb

我想知道是否可以使用通配符在indexeddb对象存储上执行搜索。 使用以“555”开头的键(例如

)找到所有对象会很方便

4 个答案:

答案 0 :(得分:5)

这可以使用复合键或密钥片段开箱即用。 密钥在IndexedDB中的工作方式是生成“keyRange”对象并将其传递给光标调用。密钥范围传递信息,如“从A开始到Z结束,包括在内。”

本质上,内置了部分匹配;缺点是您的光标将返回键之间的任何键,您可能需要进一步过滤掉这些结果。

假设您将这些单词作为对象库中的键:

  • 土豚
  • 苹果
  • 谷歌
  • 微软

关键范围“A到Z,包括”将返回所有这些,但“Ap to Z,inclusive”将返回最后三个。

我用来实现这个的另一种技术是将“过滤器”函数传递给调用IndexedDB的方法。在onsuccess回调方法中,将结果(event.target.result)传递给过滤函数,如果返回true,则调用方法调用者的onsuccess回调。

答案 1 :(得分:3)

是的,使用通配符是可行的。

我还不能投票甚至评论以前的答案(嗯...)所以我只想重复用户2025527的答案,因为它完全符合我的需要。

使用bounds方法并指定第一个参数的基值和相同的值以及第二个参数的额外字符。

在大多数情况下,额外字符字符应该是字符集中的最后一个字符:\ uffff

但是你可以自由决定什么构成限制,特别是在处理本地化时。

请注意您的索引中包含以下值:

  • A
  • AB
  • BA
  • BB
  • C

要查找以“BA”命名的所有内容,您应该使用

var range = IDBKeyRange.bound("BA", "BA" + '\uffff');

答案 2 :(得分:2)

默认情况下不可能,但我为indexeddb编写的库支持它。试试linq2indexeddb

答案 3 :(得分:1)

也可以使用indexeddb中的通配符进行搜索,请参阅链接IndexedDB Fuzzy Search

下面的通配符应该有效: var range = IDBKeyRange.bound(“555”,“555”+'\ uffff');

或者可以使用Linq2indexeddb库来使用like。