谁能解释为什么我的 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",但完全忽略了强度、形式和包装大小。
谁能看到我做错了什么?
哦,所有字段都存储为字符串....
干杯,
担
附加信息:
我使用复合索引创建的另一个表似乎正在工作。这些表之间仅有的两个区别如下:
1)有效的表在索引中只有 2 个属性。2)在工作表中,两个属性都是 3 属性主键的一部分。
我已经通过使用 Chrome 中的“资源”选项卡测试了它是否适用于该表,它允许我通过下限键过滤索引并返回数据。
更多附加信息:
经过更多测试,并切换到 FF 以确保它不是 chrome 但我正在经历我认为我找到了问题。我不相信搜索复合索引会按我预期的方式工作......
IDBKeyRange 实际上是一个范围......看起来当我输入时,例如,
["PARA","500","TAB","32"] ["PARAz","500z","TABz","32z"]
IndexedDB 搜索从 LB 开始的第一个药物,并选择直到最后一个以上限结束的药物的所有内容。
我相信,这就是为什么它设法选择从任何价值开始的优势。它实际上并没有过滤以“500”开头的强度,而是选择药物上“500”的第一个实例到最后一个实例之间的所有内容。
如果我的假设是正确的,那么下面的文章可能有点错误/误导(因为我相信用户想要搜索一个矩形而不是一个范围:
谁能确认我的发现并告诉我是否有办法在多个值上实际搜索 IndexedDB?在上面文章的底部,有人提到了一个我认为可以工作的相交函数,但是当我在网上搜索时,它似乎不存在......
干杯,
担