indexedDB中不区分大小写的搜索

时间:2012-03-14 17:24:14

标签: indexeddb case-sensitive

有人可以告诉我是否可以使用index,openCursor和keyRange ....对indexeddb对象存储区执行不区分大小写的搜索。
我可以做区分大小写并设法使用toUpperCase函数实现一些东西,但是有很多不同的变量,它是不可行的相关...
任何帮助欢迎... Thanx ... 尝试示例:

var transaction = db.transaction("products", IDBTransaction.READ_ONLY);
var store = transaction.objectStore("products");
var descIndex = store.index('Index1');
var boundKeyRangeUpper = IDBKeyRange.bound(request.term.toUpperCase(), (request.term.toUpperCase()+'Z'));
descIndex.openCursor(boundKeyRangeUpper).onsuccess = function (e) 

更新
这是我最终实现的: 覆盖的四个范围和可能性,即FA,fA,Fa,fa ......这只在第一个字母上完成,即'F'

var boundKeyRangeUpper = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'Z'); var boundKeyRangeUpper2 = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'z'); var boundKeyRangeLower = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'z'); var boundKeyRangeLower2 = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'Z');

上面的搜索结果存储在另一个objectStore中,但其描述为大写,因此FISH,FRUIT,FRESH SALAD ...现在如果在F之后按下一个字母,例如'r'搜索将调查这个新的对象商店,其中一切都是大写的...这不是一个理想的解决方案,但它的工作原理很快就满足了我的需求......也许我们最终会得到不区分大小写的搜索,也许不...

3 个答案:

答案 0 :(得分:6)

我建议修改对象存储的结构,这是通过向键大小添加一个列(即属性到商店中的每个对象),然后将该新属性作为键而不是

//object
var lang = {
    name: 'Javascript',
    keyName: '', //THE NEW PROPERTY - KEY OF THE OBJECTSTORE
    interest: 100
};

当您向商店添加对象时,使用名称(或术语或其他)的大写修改新属性,以便对象为:

//object
var lang = {
    name: 'Javascript',
    keyName: 'JAVASCRIPT', // NEW PROPERTY MODIFIED TO UPPERCASE OF OLD KEY
    interest: 100
};

然后继续使用您的代码。

答案 1 :(得分:4)

Dexie.js在没有附加索引的情况下不区分大小写的搜索方面做得很好。

答案 2 :(得分:1)

您看到的内容是IndexedDB游标是lexicographically sorted

在这种范例下,> A,与alphabetical sorting不同,听起来更像你正在寻找的东西。

要实现按字母顺序排序,您必须浏览词典排序中的所有记录(直到event.target.result中的onsuccess为空),然后将结果添加到共享全局,然后,完成字典排序后,返回按字母顺序排列的共享全局。