IDBObjectStore: index() method
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Note: This feature is available inWeb Workers.
Theindex() method of theIDBObjectStoreinterface opens a named index in the current object store, after which it can be usedto, for example, return a series of records sorted by that index using a cursor.
In this article
Syntax
index(name)Parameters
nameThe name of the index to open.
Return value
AnIDBIndex object for accessing the index.
Exceptions
InvalidStateErrorDOMExceptionThrown if the source object store has been deleted, or the transaction for the object store has finished.
NotFoundErrorDOMExceptionThrown if there is no index with the given name (case-sensitive) in the database.
Examples
In the following example we open a transaction and an object store, then get the indexlName from a simple contacts database. We then open a basic cursor on theindex usingIDBIndex.openCursor — this works the same as opening a cursordirectly on anObjectStore usingIDBObjectStore.openCursorexcept that the returned records are sorted based on the index, not the primary key.
Finally, we iterate through each record, and insert the data into an HTML table. For acomplete working example, see ourIDBIndex example in IndexedDB-examples demo repo (View the example live.)
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."); } };}Specifications
| Specification |
|---|
| Indexed Database API 3.0> # dom-idbobjectstore-index> |
Browser compatibility
See also
- Using IndexedDB
- Starting transactions:
IDBDatabase - Using transactions:
IDBTransaction - Setting a range of keys:
IDBKeyRange - Retrieving and making changes to your data:
IDBObjectStore - Using cursors:
IDBCursor - Reference example:To-do Notifications (View the example live).