Indexeddb:使用通配符搜索

Jea*_*eri 6 javascript indexeddb

我想知道是否可以使用通配符在indexeddb对象存储上执行搜索.例如,使用以"555"开头的键来查找所有对象会很方便

bul*_*ley 5

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

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

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

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

关键范围"A到Z,包括"将返回所有这些,但"Ap到Z,包括"将返回最后三个.

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


小智 5

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

我还不能投票,甚至不能评论以前的答案(嗯...),所以我只会重复 user2025527 的答案,因为它完全满足我的需求。

使用bounds 方法并为第一个参数指定基值,并为第二个参数指定相同值加上一个额外字符。

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

但您可以自由决定限制的构成,尤其是在处理本地化时。

以免说您的索引中有以下值:

  • A
  • AB
  • 学士
  • BB
  • C

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

var range = IDBKeyRange.bound("BA", "BA" + '\uffff');
Run Code Online (Sandbox Code Playgroud)

  • 那么如何搜索包含字母“B”的所有值 (2认同)