DOM
:インターフェイス
:IDBIndex インターフェイス
編集:2022.04.06 by T.A.
→● MS(en-US)
IndexedDB API の IDBIndex インターフェイスは、データベース内のインデックスへの非同期アクセスを提供します。インデックスは、別のオブジェクト ストアでレコードを検索するための一種のオブジェクト ストアです。参照オブジェク トストアと呼ばれます。このインターフェースを使用してデータを取得します。
主キーまたはインデックスを使用して、オブジェクト ストア内のレコードを取得できます。インデックスを使用すると、主キー以外のレコードを格納するオブジェクトの値のプロパティを使用して、オブジェクト ストアのレコードを検索できます。
インデックスは永続的な Key-Value ストレージであり、そのレコードの値部分は、参照されるオブジェクト ストア内のレコードのキー部分です。インデックス内のレコードは、参照されるオブジェクト ストア内のレコードが挿入、更新、または削除されるたびに自動的に入力されます。インデックス内の各レコードは、参照されるオブジェクト ストア内の1つのレコードのみを指すことができます。ただし、複数のインデックスが同じオブジェクト ストアを参照できます。オブジェクト ストアが変更されると、オブジェクト ストアを参照するすべてのインデックスは自動的に更新されます。
範囲内のキーのセットを取得できます。詳細については、IDBKeyRange を参照してください。
注: この機能は Web Workers で使用できます
プロパティ
- IDBIndex.isAutoLocale 読取専用 非標準
- インデックスの作成時に auto のロケール値が指定されているかどうかを示すブール値を返します(createIndex() の optionalParameters を参照)。
- IDBIndex.locale 読取専用 非標準
- 作成時にロケール値が指定されている場合は、インデックスのロケール(たとえば、en-US、または pl)を返します(createIndex()のoptionalParameters を参照)。
- IDBIndex.name ● ●
- このインデックスの名前。
- IDBIndex.objectStore 読取専用 ●
- このインデックスによって参照されるオブジェクト ストアの名前。
- IDBIndex.keyPath 読取専用 ●
- このインデックスのキーパス。nullの場合、このインデックスは自動入力されません。
- IDBIndex.multiEntry 読取専用 ●
- インデックスのキーパスを評価した結果が配列を生成するときのインデックスの動作に影響します。true の場合、キーの配列内の各アイテムのインデックスに 1 つのレコードがあります。false の場合、配列であるキーごとに 1 つのレコードがあります。
- IDBIndex.unique 読取専用 ●
- true の場合、このインデックスはキーの重複値を許可しません。
メソッド
継承元: EventTarget
- IDBIndex.count() ●
- IDBRequest オブジェクトを返し、別のスレッドで、キー範囲内のレコード数を返します。
- IDBIndex.get() ●
- IDBRequest オブジェクトを返し、および、別のスレッドで、指定されたキーに対応する参照オブジェクト ストア内の値、または最初に対応する値のいずれかを検索します。キーが IDBKeyRange の場合。
- IDBIndex.getKey() ●
- IDBRequest オブジェクトを返し、および、別のスレッドで、指定されたキーまたは主キーのいずれかを検索します、キーがIDBKeyRangeの場合。
- IDBIndex.getAll() ●
- IDBRequest オブジェクトを返します。別のスレッドで、指定されたキーに対応する、または範囲内にある、参照されるオブジェクト ストア内の一致するすべての値を検索します。キーが IDBKeyRange の場合。
- IDBIndex.getAllKeys() ●
- IDBRequest オブジェクトを返します。別のスレッドで、指定されたキーに対応する、または範囲内にある、参照されたオブジェクト ストア内の一致するすべてのキーを検索します。キーが IDBKeyRange の場合。
- IDBIndex.openCursor() ●
- IDBRequest オブジェクトを返し、および、別のスレッドで、指定されたキー範囲にカーソルを作成します。
- IDBIndex.openKeyCursor() ●
- IDBRequest オブジェクトを返し、および、別のスレッドで、指定されたキー範囲にカーソルを作成します。このインデックスによって整理されます。
例
次の例では、トランザクションとオブジェクトストアを開きます。次に、単純な連絡先データベースからインデックス lName を取得します。次に、IDBIndex.openCursor を使用してインデックスの基本カーソルを開きます ― これは、IDBObjectStore.openCursor を使用して ObjectStore で直接カーソルを開くのと同じように機能しますが、返されるレコードがインデックスに基づいてソートされる点が異なります。主キーではありません。
最後に、各レコードを反復処理し、データをHTMLテーブルに挿入します。完全な実例については、IndexedDB-examples デモリポジトリ を参照してください(例をライブで表示します)。
function displayDataByIndex() {
tableEntry.innerHTML = '';
var transaction = db.transaction(['contactsList'], 'readonly');
var objectStore = transaction.objectStore('contactsList');
var myIndex = objectStore.index('lName');
myIndex.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if(cursor) {
var tableRow = document.createElement('tr');
tableRow.innerHTML = '<td>' + cursor.value.id + '</td>'
+ '<td>' + cursor.value.lName + '</td>'
+ '<td>' + cursor.value.fName + '</td>'
+ '<td>' + cursor.value.jTitle + '</td>'
+ '<td>' + cursor.value.company + '</td>'
+ '<td>' + cursor.value.eMail + '</td>'
+ '<td>' + cursor.value.phone + '</td>'
+ '<td>' + cursor.value.age + '</td>';
tableEntry.appendChild(tableRow);
cursor.continue();
} else {
console.log('Entries all displayed.');
}
};
};
テスト
ここに表示
|
|
|
|
|
|