IDBIndex: multiEntry プロパティ
IDBIndex
インターフェイスの読み取り専用プロパティ multiEntry
は、インデックスのキーパスを評価した結果が配列になったときこのインデックスがどのようにふるまうかに影響する論理値を返します。
この値は、インデックスの作成時、IDBObjectStore.createIndex
メソッドにより決定されます。このメソッドは、multiEntry
プロパティを true
または false
に設定した省略可能な引数 options
をとります。
メモ: この機能はウェブワーカー内で利用可能です。
値
以下の論理値です。
値 | 効果 |
---|---|
true | キーの配列の各要素それぞれをインデックスのレコードにします。 |
false | 配列である各キーを 1 個のレコードにします。 |
例
以下の例では、トランザクションとオブジェクトストアを開き、シンプルな連絡先データベースからインデックス lName
を取得します。そして、このインデックスで IDBIndex.openCursor
により基本的なカーソルを開きます。これは、返されるレコードが主キーではなくこのインデックスに基づいてソートされる以外、ObjectStore
で直接 IDBObjectStore.openCursor
を用いてカーソルを開くのと同じように動きます。
このインデックスの複数エントリー状態をコンソールに記録します。これは false
になるはずです。
最後に、各レコードを走査し、データを HTML テーブルに挿入します。動く例全体は、IndexedDB-examples デモレポジトリーを参照してください。(動く例を見る)
js
function displayDataByIndex() {
tableEntry.innerHTML = "";
const transaction = db.transaction(["contactsList"], "readonly");
const objectStore = transaction.objectStore("contactsList");
const myIndex = objectStore.index("lName");
console.log(myIndex.multiEntry);
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 # dom-idbindex-multientry |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キー範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)