IDBObjectStore
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.
* Some parts of this feature may have varying levels of support.
Note: This feature is available inWeb Workers.
TheIDBObjectStore interface of theIndexedDB API represents an object store in a database. Records within an object store are sorted according to their keys. This sorting enables fast insertion, look-up, and ordered retrieval.
In this article
Instance properties
IDBObjectStore.indexNamesRead onlyA list of the names ofindexes on objects in this object store.
IDBObjectStore.keyPathRead onlyThekey path of this object store. If this attribute is
null, the application must provide a key for each modification operation.IDBObjectStore.nameThe name of this object store.
IDBObjectStore.transactionRead onlyThe
IDBTransactionobject to which this object store belongs.IDBObjectStore.autoIncrementRead onlyThe value of the auto increment flag for this object store.
Instance methods
IDBObjectStore.add()Returns an
IDBRequestobject and, in a separate thread, creates astructured clone of thevalue, and stores the cloned value in the object store. This is for adding new records to an object store.IDBObjectStore.clear()Creates and immediately returns an
IDBRequestobject, and clears this object store in a separate thread. This is for deleting all current records out of an object store.IDBObjectStore.count()Returns an
IDBRequestobject and, in a separate thread, returns the total number of records that match the provided key orIDBKeyRange. If no arguments are provided, it returns the total number of records in the store.IDBObjectStore.createIndex()Creates a new index during a version upgrade, returning a new
IDBIndexobject in the connected database.IDBObjectStore.delete()returns an
IDBRequestobject and, in a separate thread, deletes the store object selected by the specified key. This is for deleting individual records out of an object store.IDBObjectStore.deleteIndex()Destroys the specified index in the connected database, used during a version upgrade.
IDBObjectStore.get()Returns an
IDBRequestobject and, in a separate thread, returns the store object store selected by the specified key. This is for retrieving specific records from an object store.IDBObjectStore.getKey()Returns an
IDBRequestobject and, in a separate thread, retrieves and returns the record key for the object in the object stored matching the specified parameter.IDBObjectStore.getAll()Returns an
IDBRequestobject and, in a separate thread, retrieves all objects in the object store matching the specified parameter or all objects in the store if no parameters are given.IDBObjectStore.getAllKeys()Returns an
IDBRequestobject and, in a separate thread, retrieves record keys for all objects in the object store matching the specified parameter or all objects in the store if no parameters are given.IDBObjectStore.getAllRecords()ExperimentalReturns an
IDBRequestobject and, in a separate thread, finds all matching records in the object store (including primary keys and values) that correspond to the given key or are in range, ifkeyis anIDBKeyRange.IDBObjectStore.index()Opens an index from this object store after which it can, for example, be used to return a sequence of records sorted by that index using a cursor.
IDBObjectStore.openCursor()Returns an
IDBRequestobject and, in a separate thread, returns a newIDBCursorWithValueobject. Used for iterating through an object store by primary key with a cursor.IDBObjectStore.openKeyCursor()Returns an
IDBRequestobject and, in a separate thread, returns a newIDBCursor. Used for iterating through an object store with a key.IDBObjectStore.put()Returns an
IDBRequestobject and, in a separate thread, creates astructured clone of thevalue, and stores the cloned value in the object store. This is for updating existing records in an object store when the transaction's mode isreadwrite.
Example
This example shows a variety of different uses of object stores, from updating the data structure withIDBObjectStore.createIndex inside anonupgradeneeded function, to adding a new item to our object store withIDBObjectStore.add. For a full working example, see ourTo-do Notifications app (view example live).
// Let us open our databaseconst DBOpenRequest = window.indexedDB.open("toDoList", 4);DBOpenRequest.onsuccess = (event) => { note.appendChild(document.createElement("li")).textContent = "Database initialized."; // store the result of opening the database in db. db = DBOpenRequest.result;};// This event handles the event whereby a new version of// the database needs to be created Either one has not// been created before, or a new version number has been// submitted via the window.indexedDB.open line aboveDBOpenRequest.onupgradeneeded = (event) => { const db = event.target.result; db.onerror = (event) => { note.appendChild(document.createElement("li")).textContent = "Error loading database."; }; // Create an objectStore for this database const objectStore = db.createObjectStore("toDoList", { keyPath: "taskTitle", }); // define what data items the objectStore will contain objectStore.createIndex("hours", "hours", { unique: false }); objectStore.createIndex("minutes", "minutes", { unique: false }); objectStore.createIndex("day", "day", { unique: false }); objectStore.createIndex("month", "month", { unique: false }); objectStore.createIndex("year", "year", { unique: false }); objectStore.createIndex("notified", "notified", { unique: false }); note.appendChild(document.createElement("li")).textContent = "Object store created.";};// Create a new item to add in to the object storeconst newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no", },];// open a read/write db transaction, ready for adding the dataconst transaction = db.transaction(["toDoList"], "readwrite");// report on the success of the transaction completing, when everything is donetransaction.oncomplete = (event) => { note.appendChild(document.createElement("li")).textContent = "Transaction completed.";};transaction.onerror = (event) => { note.appendChild(document.createElement("li")).textContent = "Transaction not opened due to error. Duplicate items not allowed.";};// create an object store on the transactionconst objectStore = transaction.objectStore("toDoList");// make a request to add our newItem object to the object storeconst objectStoreRequest = objectStore.add(newItem[0]);objectStoreRequest.onsuccess = (event) => { note.appendChild(document.createElement("li")).textContent = "Request successful.";};Specifications
| Specification |
|---|
| Indexed Database API 3.0> # object-store-interface> |
Browser compatibility
See also
- Using IndexedDB
- Starting transactions:
IDBDatabase - Using transactions:
IDBTransaction - Setting a range of keys:
IDBKeyRange - Using cursors:
IDBCursor - Reference example:To-do Notifications (View the example live).