使用Dexie过滤WHERE子句中的IndexedDB startsWith

时间:2018-12-01 03:32:59

标签: dexie

Dexie 2.0.4

JSFiddle:https://jsfiddle.net/n3xsokay/

我试图弄清楚如何使用DexieJS在多个值上过滤IndexedDB表。尽管上面提到的小提琴并不是我真正需要的,但它很接近。我有一个包含四列的表:

  • 名称
  • 年龄
  • 高度
  • ShoeSize

我用如下表设置了索引:

db.version(1).stores({
    friends: '++id,name, age, height'
});

我用(当前)1000个随机ish值填充表以进行测试。我需要能够基于多个值构建动态查询。例如:

  • 年龄> 90,身高> 7
  • 身高= 7,年龄= 50,名字以“ Foo-1”开头
  • 名字以'Foo-3'开头,年龄<50

在小提琴中,我正在使用WHERE子句来执行任何过滤器的第一部分,然后使用过滤器函数过滤结果集合。

var coll = db.friends.where('age').above(90).filter(function (friend) {
    return friend.height > 5 && friend.shoeSize === 12;
});
log('have coll');
return coll.toArray();

它可以工作,但是方法太慢。我尝试过使用过滤器的不同组合,但似乎没有什么不同

最终,它将用于具有10,000条记录的自动完成/提前输入功能,每个查询需要15-20秒。仅对1000条记录使用过滤器功能实现该过程就需要花费几秒钟。获取初始集合的速度非常快(当获取集合时,小提琴会注销“ have coll”并且几乎​​是瞬时的),但是应用过滤器功能会花费很长时间。

我研究了复合索引,它们看起来可以用于除“ startsWith”过滤之外的所有内容。

是否可以在WHERE子句中包含startsWith类型过滤器?

谢谢

TTE

0 个答案:

没有答案