The IDBObjectStore interface of the IndexedDB 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.
Note: This feature is available in Web Workers.
Properties
IDBObjectStore.indexNamesRead only- A list of the names of indexes on objects in this object store.
IDBObjectStore.keyPathRead only- The key path of this object store. If this attribute is
null, the application must provide a key for each modification operation. IDBObjectStore.name- The name of this object store.
IDBObjectStore.transactionRead only- The
IDBTransactionobject to which this object store belongs. IDBObjectStore.autoIncrementRead only- The value of the auto increment flag for this object store.
Methods
IDBObjectStore.add()- Returns an
IDBRequestobject, and, in a separate thread, creates a structured 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 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 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.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 a structured 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 with IDBObjectStore.createIndex inside an onupgradeneeded function, to adding a new item to our object store with IDBObjectStore.add. For a full working example, see our To-do Notifications app (view example live.)
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>Database initialised.</li>';
// 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 above
DBOpenRequest.onupgradeneeded = function(event) {
var db = event.target.result;
db.onerror = function(event) {
note.innerHTML += '<li>Error loading database.</li>';
};
// Create an objectStore for this database
var 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.innerHTML += '<li>Object store created.</li>';
};
// Create a new item to add in to the object store
var 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 data
var transaction = db.transaction(["toDoList"], "readwrite");
// report on the success of the transaction completing, when everything is done
transaction.oncomplete = function(event) {
note.innerHTML += '<li>Transaction completed.</li>';
};
transaction.onerror = function(event) {
note.innerHTML += '<li>Transaction not opened due to error. Duplicate items not allowed.</li>';
};
// create an object store on the transaction
var objectStore = transaction.objectStore("toDoList");
// make a request to add our newItem object to the object store
var objectStoreRequest = objectStore.add(newItem[0]);
objectStoreRequest.onsuccess = function(event) {
note.innerHTML += '<li>Request successful .</li>';
}
Specifications
| Specification | Status | Comment |
|---|---|---|
| Indexed Database API 2.0 The definition of 'IDBObjectStore' in that specification. |
Recommendation | |
| Indexed Database API Draft The definition of 'IDBObjectStore' in that specification. |
Recommendation |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
IDBObjectStore | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
add | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
autoIncrement | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
clear | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
count | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
createIndex | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
delete | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
deleteIndex | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
get | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
getAll | Chrome Full support 48 | Edge Full support ≤79 | Firefox Full support 44 | IE ? | Opera Full support 35 | Safari Full support 10.1 | WebView Android Full support 48 | Chrome Android Full support 48 | Firefox Android Full support 48 | Opera Android Full support 35 | Safari iOS Full support 10.3 | Samsung Internet Android Full support 5.0 |
getAllKeys | Chrome Full support 48 | Edge Full support ≤79 | Firefox Full support 44 | IE ? | Opera Full support 35 | Safari Full support 10.1 | WebView Android Full support 48 | Chrome Android Full support 48 | Firefox Android Full support 48 | Opera Android Full support 35 | Safari iOS Full support 10.3 | Samsung Internet Android Full support 5.0 |
getKey | Chrome Full support 48 | Edge Full support ≤79 | Firefox Full support 51 | IE ? | Opera Full support 45 | Safari Full support 10.1 | WebView Android Full support 48 | Chrome Android Full support 48 | Firefox Android Full support 58 | Opera Android Full support 43 | Safari iOS Full support 10.3 | Samsung Internet Android Full support 5.0 |
index | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
indexNames | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
keyPath | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
name | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
openCursor | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
openKeyCursor | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
44
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
put | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
transaction | Chrome
Full support
24
| Edge Full support 12 | Firefox
Full support
16
| IE Partial support 10 | Opera Full support 15 | Safari Full support 7 | WebView Android
Full support
Yes
| Chrome Android
Full support
25
| Firefox Android Full support 22 | Opera Android Full support 14 | Safari iOS Full support 8 | Samsung Internet Android
Full support
1.5
|
| Available in workers | Chrome Full support Yes | Edge Full support ≤18 | Firefox Full support 37 | IE ? | Opera Full support Yes | Safari ? | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox Android Full support 37 | Opera Android Full support Yes | Safari iOS ? | Samsung Internet Android Full support Yes |
Legend
- Full support
- Full support
- Partial support
- Partial support
- Compatibility unknown
- Compatibility unknown
- User must explicitly enable this feature.
- User must explicitly enable this feature.
- Requires a vendor prefix or different name for use.
- Requires a vendor prefix or different name for use.
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 example live.)
