IDBIndex
Baseline 廣泛可用 *
注意:此功能在 Web Workers 中可用。
IDBIndex 介面(位於 IndexedDB API 中)提供對資料庫中 索引的非同步訪問。索引是一種物件儲存,用於查詢另一個名為“所引用物件儲存”的物件儲存中的記錄。您可以使用此介面檢索資料。
您可以透過主鍵或使用索引來檢索物件儲存中的記錄。索引允許您使用物件儲存記錄中除主鍵以外的其他屬性來查詢記錄。
索引是一種持久化的鍵值儲存,其中其記錄的值部分是所引用物件儲存中記錄的鍵部分。當所引用物件儲存中的記錄被插入、更新或刪除時,索引中的記錄會自動填充。索引中的每條記錄只能指向其所引用物件儲存中的一條記錄,但多個索引可以引用同一個物件儲存。當物件儲存發生更改時,所有引用該物件儲存的索引都會自動更新。
您可以獲取一個範圍內的鍵集。有關更多資訊,請參閱 IDBKeyRange。
例項屬性
IDBIndex.isAutoLocale只讀 非標準 已棄用-
返回一個布林值,指示在建立索引時是否指定了
auto的locale值(參見IDBObjectStore.createIndex()的options引數)。 IDBIndex.locale只讀 非標準 已棄用-
返回索引的 locale(例如
en-US或pl),前提是在建立索引時指定了locale值(參見IDBObjectStore.createIndex()的options引數)。 IDBIndex.name-
此索引的名稱。
IDBIndex.objectStore只讀-
此索引所引用的物件儲存的名稱。
IDBIndex.keyPath只讀-
此索引的 鍵路徑。如果為 null,則此索引不是自動填充的。
IDBIndex.multiEntry只讀-
當評估索引的鍵路徑的結果產生一個數組時,此屬性會影響索引的行為。如果為
true,則索引中每項陣列元素都會有一條記錄。如果為false,則每項陣列鍵值都會有一條記錄。 IDBIndex.unique只讀-
如果為
true,則此索引不允許鍵具有重複值。
例項方法
繼承自:EventTarget
IDBIndex.count()-
返回一個
IDBRequest物件,並在單獨的執行緒中返回鍵範圍內記錄的數量。 IDBIndex.get()-
返回一個
IDBRequest物件,並在單獨的執行緒中查詢所引用物件儲存中與給定鍵對應的條目,或者如果key是一個IDBKeyRange,則查詢第一個匹配的條目。 IDBIndex.getKey()-
返回一個
IDBRequest物件,並在單獨的執行緒中查詢給定鍵,或者如果key是一個IDBKeyRange,則查詢主鍵。 IDBIndex.getAll()-
返回一個
IDBRequest物件,並在單獨的執行緒中查詢所引用物件儲存中與給定鍵匹配的所有值,或者如果key是一個IDBKeyRange,則查詢範圍內的所有匹配值。 IDBIndex.getAllKeys()-
返回一個
IDBRequest物件,並在單獨的執行緒中查詢所引用物件儲存中與給定鍵匹配的所有鍵,或者如果key是一個IDBKeyRange,則查詢範圍內的所有匹配鍵。 IDBIndex.openCursor()-
返回一個
IDBRequest物件,並在單獨的執行緒中為指定的鍵範圍建立 遊標。 IDBIndex.openKeyCursor()-
返回一個
IDBRequest物件,並在單獨的執行緒中為指定的鍵範圍建立遊標,該範圍按此索引進行排序。
示例
在以下示例中,我們打開了一個事務和一個物件儲存,然後從一個簡單的聯絡人資料庫中獲取了索引 lName。然後,我們使用 IDBIndex.openCursor 在該索引上打開了一個基本遊標——這與直接在 ObjectStore 上使用 IDBObjectStore.openCursor 開啟遊標的工作方式相同,但返回的記錄是根據索引排序的,而不是主鍵。
最後,我們遍歷每條記錄,並將資料插入 HTML 表格。有關完整的可執行示例,請參閱我們的 IndexedDB-examples demo 倉庫(線上檢視示例)。
function displayDataByIndex() {
tableEntry.textContent = "";
const transaction = db.transaction(["contactsList"], "readonly");
const objectStore = transaction.objectStore("contactsList");
const myIndex = objectStore.index("lName");
myIndex.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
const tableRow = document.createElement("tr");
for (const cell of [
cursor.value.id,
cursor.value.lName,
cursor.value.fName,
cursor.value.jTitle,
cursor.value.company,
cursor.value.eMail,
cursor.value.phone,
cursor.value.age,
]) {
const tableCell = document.createElement("td");
tableCell.textContent = cell;
tableRow.appendChild(tableCell);
}
tableEntry.appendChild(tableRow);
cursor.continue();
} else {
console.log("Entries all displayed.");
}
};
}
規範
| 規範 |
|---|
| Indexed Database API 3.0 # index-interface |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。