IndexedDB的IDBKeyRange复合/多重指标不工作(IndexedDB IDBKeyRa

2019-10-19 08:00发布

任何人都可以解释为什么我只IDBKeyRange似乎是第一列过滤?

我有一个索引定义如下:

osDrugs.createIndex("combined", ["name", "strength", "form", "packsize"], {unique: false});

我的查询是大致如下:

var transaction = pimsDB.transaction("drugs");
var objectStore = transaction.objectStore("drugs");
var range = IDBKeyRange.bound([tmpName, tmpStrength, tmpForm, tmpPack],[tmpName+"z", tmpStrength + "z", tmpForm+"z", tmpPack+"z"]);
var index = objectStore.index("combined");
var request = index.openCursor(range);

我的结果似乎是过滤从tmpName高达tmpName +“Z”,但完全无视强度,形状和packsize。

任何人都可以看到我做错了什么?

哦,所有的字段存储为字符串....

干杯,

附加信息:

我有一个综合指数创造了另一个表似乎是工作。 这些表之间唯一的两个差如下:

1)工作表仅具有在索引2点的属性。 2)在工作表中这两个属性是一个3属性主键的一部分。

我测试过,它通过使用Chrome的“资源”选项卡,让我通过下界键过滤索引和返回数据的作品在此表中。

详细信息附加信息:

一些更多的测试后,并切换到FF,以确保它不是Chrome,但我正在经历我想我已经找到了问题。 我不相信那个搜索综合指数的作品,我期待的方式......

该IDBKeyRange实际上是一个范围......看来,当我输入,例如,

[ “PARA”, “500”, “TAB”, “32”] [ “PARAz”, “500Z”, “TABz”, “32Z”]

IndexedDB的搜索启动在LB第一药物,并选择一切到那个在上限结束最后一次药物。

这一点,我相信,这就是为什么它的管理来选择任意值开始的强项。 它实际上没有筛选一种启动“500”,它的选择对药物的“500强”的第一个实例之间的一切,直至最后的强项。

如果我的假设是正确的,下面的文章可能是一个有点不对劲/误导性(因为我相信用户想查询一个矩形,而不是一个范围:

索引DB光标范围上mulitiple属性

任何人都可以证实了我发现,并告诉我,如果有一种方法,我居然能在多个值搜索索引资料? 在上述文章的底部,有人提到的交叉功能,我认为会的工作,但是当我在网上搜索,它似乎并不存在...

干杯,

Answer 1:

我已经公布了广义解过的:

https://gist.github.com/inexorabletash/704e9688f99ac12dd336

简短的总结是,你需要检查结果的每个维度,如果任何数值超出界限为维度,直接跳到下一个合理的关键。



文章来源: IndexedDB IDBKeyRange Compound/Multiple Index not working