ワイルドカードを使用して indexeddb オブジェクト ストアを検索できるかどうか疑問に思っていました。たとえば、「555」で始まるキーを持つすべてのオブジェクトを検索すると便利です。
4 に答える
これは、複合キーまたはキーフラグメントのいずれかを使用してすぐに使用できます。IndexedDBでキーが機能する方法は、「keyRange」オブジェクトを生成し、それをカーソル呼び出しに渡すことです。キー範囲は、「Aで開始し、Zで終了する」などの情報を渡します。
本質的に、これには部分的なマッチングが組み込まれています。欠点は、カーソルがキーの間にあるすべてのキーを返すことであり、それらの結果をさらにフィルタリングする必要がある場合があります。
オブジェクトストアのキーとして次の単語があるとします。
- ツチブタ
- アップル
- グーグル
- マイクロソフト
キー範囲「AからZ、包括的」はこれらすべてを返しますが、「ApからZ、包括的」は最後の3つだけを返します。
これを実装するために使用したもう1つの手法は、IndexedDBを呼び出すメソッドに「フィルター」関数を渡すことです。メソッドの成功コールバック内で、結果(event.target.result
)をフィルター関数に渡し、trueが返された場合は、メソッド呼び出し元の成功コールバックを呼び出します。
はい、ワイルドカードを使用することは可能です。
以前の回答に投票したり、コメントしたりすることはまだできません(うーん...)ので、user2025527の回答を繰り返します。
境界メソッドを使用して、1 番目の引数にベース値を指定し、2 番目の引数に同じ値と追加の文字を指定します。
ほとんどの場合、余分な文字は文字セットの最後の文字にする必要があります: \uffff
ただし、特にローカリゼーションを扱う場合は、制限を構成するものを自由に決定できます。
インデックスに次の値があるとは限りません。
- あ
- AB
- B
- 学士
- BB
- ハ
「BA」で示されているすべてを見つけるには、使用する必要があります
var range = IDBKeyRange.bound("BA", "BA" + '\uffff');
デフォルトでは可能ではありませんが、indexeddb 用に作成した私のライブラリはそれをサポートしています。linq2indexeddbを試してください。