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