2012-03-14 18 views
3

インデックス、openCursor、keyRangeを使用してindexeddbオブジェクトストアで大文字と小文字を区別しない検索を実行できるかどうか教えてください。
私は大文字と小文字を区別し、歓迎すべてのヘルプは...ありがとう... ...試みの 例を
toUpperCaseの機能を使用して非常に多くの異なるvaraitionsは、それが実現可能レリではないことがあります。indexedDBの大文字と小文字を区別しない検索

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) 

UPDATE
この何ですか?カバーと可能性はすなわち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');

結果最初の文字の上に行われ 4つの範囲を:私は実装してしまいました別のobjectStoreに格納されますが、その説明は大文字で、したがってFISH、FRUIT、FRESH SALAD ... Fの後に文字が押された場合'r'検索ではすべてが大文字であるこの新しいオブジェクトストアが検索されます...これはこれまでのところ理想的な解決策ではありませんが、機能しており、私のニーズには素早いです...おそらく、そうではありません...

答えて

5

オブジェクトストアの構造を変更することをお勧めします。これは、キーの同じ値を大文字にして列(つまり、ストア内の各オブジェクトにプロパティ)を追加することです代わりに新しいプロパティキー。

名前(または用語または何でも)の大文字と新しいプロパティを変更ストアにオブジェクトを追加
//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 
}; 

その後、としてあなたのコードを続行それ。

+0

ありがとうございました。これは合理的な解決策ですが、これはすべてのエントリを複製する数千の行のデータセットのためです...私は再帰を使用してtoUpperCaseとtoLowerCaseで1つのバインドを使用していましたが、まだ何も具体的ではありません。 – BriscoCountyJr

+0

コードで、 keyRangeを指定したときに、単一行または複数行を照会していましたか? – Amro

+0

複数の行。私がしようとしているのは、あなたが手紙を押すときです。 'F'、オートコンプリートボックスはFRESH FURIT、fragances、fReSh Saladを返します。したがって、 'F'を押すと、idexeddbの検索は、製品名が始まるものとは無関係のすべての製品、つまり小文字の「f」または大文字の「F」を返します。 ..私はSQLでそれがはるかに簡単だろうと知っているが、それはローカルストレージが進む方法であるようにindexeddbを行くと思った... – BriscoCountyJr

1

あなたはあなたが見るものを見る理由はのIndexedDBカーソルがlexicographically sortedであるということです。

このパラダイムでは、あなたが探しているもののように聞こえるalphabetical sortingとは異なり、> Aです。

がに結果を追加し、(あなたはonsuccessevent.target.resultとしてnullを得るまで)あなたは辞書式ソート内のすべてのレコードをカーソルする必要があると思いソートアルファベットを達成するために、グローバル共有し、その後、辞書式ソートの完了時に、あなたの共有グローバルのアルファベット順を返します。

+0

そのためのThanx。アルファベットのカーソルが辞書編集ではなく有用であるような現実世界のケースがあると思っていますが、それはそうです。 – BriscoCountyJr

+0

完全に同意します。仕様は若くて多分それが起こるかもしれない。 – buley

4

Dexie.jsインデックスを追加しない大文字と小文字を区別しない検索では効果的です

+0

これの背後にある開発者を知っていますか?共有してくれてありがとうございました。 – buley

+1

いいえ、でもすばらしいライブラリです。 –

+1

ここは著者からの素晴らしい記事です。それは素晴らしいパフォーマンスを備えた本当に素晴らしい図書館のようです。 https://hacks.mozilla.org/2014/06/breaking-the-borders-of-indexeddb/ – John

関連する問題