IDBIndex: getKey() メソッド
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.
IDBIndex
インターフェイスの getKey()
メソッドは、IDBRequest
オブジェクトを返し、別スレッドでこのインデックス内の与えられたキーに対応する主キー、もしくは key
が IDBKeyRange
に設定された場合は対応する最初の主キーを検索します。
主キーが見つかった場合は、これを要求オブジェクトの result
に設定します。IDBIndex.get
と違ってレコード全体は返さないことに注意してください。
メモ: この機能はウェブワーカー内で利用可能です。
構文
getKey()
getKey(key)
引数
key
省略可-
取得するレコードを特定するキーまたは
IDBKeyRange
です。この値がnull
または省略された場合は、ブラウザーは無限のキー範囲を使用します。
返値
この操作に関係する今後のイベントが発火する IDBRequest
オブジェクトです。
操作に成功した場合は、この要求の result
プロパティの値は与えられたキーもしくはキー範囲にマッチする最初のレコードのキーになります。
例外
このメソッドは、以下の種類のいずれかの DOMException
を投げる可能性があります。
TransactionInactiveError
DOMException
-
この
IDBIndex
のトランザクションが実行中でないとき投げられます。 DataError
DOMException
-
与えられたキーまたはキー範囲が無効なキーを含むとき投げられます。
InvalidStateError
DOMException
-
この
IDBIndex
が削除されたか取り除かれたとき投げられます。
例
以下の例では、トランザクションとオブジェクトストアを開き、シンプルな連絡先データベースからインデックス lName
を取得します。そして、このインデックスで IDBIndex.openCursor
により基本的なカーソルを開きます。これは、返されるレコードが主キーではなくこのインデックスに基づいてソートされる以外、ObjectStore
で直接 IDBObjectStore.openCursor
を用いてカーソルを開くのと同じように動きます。
そして、myIndex.getKey('Bungle')
を用いて lName
が Bungle
であるレコードの主キーを取得し、success
コールバックで要求の結果をコンソールに記録します。
最後に、各レコードを走査し、データを HTML テーブルに挿入します。動く例全体は、IndexedDB-examples デモレポジトリーを参照してください。(動く例を見る)
function displayDataByIndex() {
tableEntry.innerHTML = "";
const transaction = db.transaction(["contactsList"], "readonly");
const objectStore = transaction.objectStore("contactsList");
const myIndex = objectStore.index("lName");
const getKeyRequest = myIndex.getKey("Bungle");
getKeyRequest.onsuccess = () => {
console.log(getKeyRequest.result);
};
myIndex.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const 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("全エントリーを表示しました。");
}
};
}
仕様書
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbindex-getkey① |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キー範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)