IDBObjectStore

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

IndexedDB APIIDBObjectStore インターフェイスは、データベース内のオブジェクトストアを表します。オブジェクトストア内のレコードは、キーによってソートされています。ソートしておくことで、高速な挿入、検索、そして順番での取り出しを可能にします。

メモ: この機能はウェブワーカー内で利用可能です。

インスタンスプロパティ

IDBObjectStore.indexNames 読取専用

このオブジェクトストア内のオブジェクトのインデックスの名前のリストです。

IDBObjectStore.keyPath 読取専用

このオブジェクトストアのキーパスです。この属性が null のときは、アプリケーションはそれぞれの更新操作のためにキーを提供しなければなりません。

IDBObjectStore.name

このオブジェクトストアの名前です。

IDBObjectStore.transaction 読取専用

このオブジェクトストアが属している IDBTransaction オブジェクトです。

IDBObjectStore.autoIncrement 読取専用

このオブジェクトストアのオートインクリメントフラグの値です。

インスタンスメソッド

IDBObjectStore.add()

IDBRequest オブジェクトを返し、別のスレッドで value構造化複製を生成し、複製した値をオブジェクトストアに保存します。これはオブジェクトストアに新しいレコードを追加する操作です。

IDBObjectStore.clear()

IDBRequest オブジェクトを生成してすぐに返し、別のスレッドでこのオブジェクトストアをクリアします。これはオブジェクトストア内に現在ある全レコードを削除する操作です。

IDBObjectStore.count()

IDBRequest オブジェクトを返し、別のスレッドで指定のキーまたは IDBKeyRange にマッチするレコードの数を返します。引数なしで呼ばれた場合は、ストア内の全レコードの数を返します。

IDBObjectStore.createIndex()

バージョンの更新中に新しいインデックスを作成し、接続中のデータベースにおける新しい IDBIndex を返します。

IDBObjectStore.delete()

IDBRequest オブジェクトを返し、指定したキーによって選択されたストア内のオブジェクトを別のスレッドで削除します。これはオブジェクトストアから個別のレコードを削除する操作です。

IDBObjectStore.deleteIndex()

バージョンの更新中に用い、接続中のデータベースから指定したインデックスを削除します。

IDBObjectStore.get()

IDBRequest オブジェクトを返し、指定したキーによって選択されたストア内のオブジェクトを別のスレッドで返します。これはオブジェクトストアから特定のレコードを取り出す操作です。

IDBObjectStore.getKey()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内のオブジェクトのレコードキーを別のスレッドで取得して返します。

IDBObjectStore.getAll()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内のオブジェクトを全て取得します。引数なしで呼ばれた場合は、ストア内の全てのオブジェクトを取得します。

IDBObjectStore.getAllKeys()

IDBRequest オブジェクトを返し、指定したパラメーターにマッチするオブジェクトストア内の全てのオブジェクトのレコードキーを取得します。引数なしで呼ばれた場合は、ストア内の全てのオブジェクトについて取得します。

IDBObjectStore.index()

このオブジェクトストアでインデックスを開きます。これは、たとえば、カーソルを用いてこのインデックスでソートされたレコードの列を得るのに用いることができます。

IDBObjectStore.openCursor()

IDBRequest オブジェクトを返し、別のスレッドで新しい IDBCursorWithValue オブジェクトを返します。これはカーソルを用いて主キーでオブジェクトストアを走査するのに用います。

IDBObjectStore.openKeyCursor()

IDBRequest オブジェクトを返し、別のスレッドで新しい IDBCursor を返します。これはキーでオブジェクトストアを走査するのに用います。

IDBObjectStore.put()

IDBRequest オブジェクトを返し、別のスレッドで value構造化複製を作成し、複製した値をオブジェクトストアに保存します。これはトランザクションのモードが readwrite のときに既存のレコードを更新する操作です。

この例では、onupgradeneeded 関数内での IDBObjectStore.createIndex を用いたデータ構造の更新から、IDBObjectStore.add によるオブジェクトストアへのアイテムの追加まで、オブジェクトストアの様々な使用法を紹介します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
// 我々のデータベースを開きましょう
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を db に格納します
  db = DBOpenRequest.result;
};

// このイベントは、データベースがまだ作成されていないか、
// 上の window.indexedDB.open の行で新しいバージョン番号が
// 指定されたかで、新しいバージョンのデータベースを作成する
// 必要がある場合を処理します
DBOpenRequest.onupgradeneeded = (event) => {
  const db = event.target.result;

  db.onerror = (event) => {
    note.innerHTML +=
      "<li>データベースの読み込み中にエラーが発生しました。</li>";
  };

  // このデータベース用の objectStore を作ります

  const objectStore = db.createObjectStore("toDoList", {
    keyPath: "taskTitle",
  });

  // objectStore に格納するデータアイテムを定義します

  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>オブジェクトストアを作成しました。</li>";
};

// オブジェクトストアに追加する新しいアイテムを作成します
const newItem = [
  {
    taskTitle: "Walk dog",
    hours: 19,
    minutes: 30,
    day: 24,
    month: "December",
    year: 2013,
    notified: "no",
  },
];

// 読み書き用のトランザクションを開き、データを追加する準備をします
const transaction = db.transaction(["toDoList"], "readwrite");

// 全て完了した時、トランザクションの正常終了を報告します
transaction.oncomplete = (event) => {
  note.innerHTML += "<li>トランザクションが完了しました。</li>";
};

transaction.onerror = (event) => {
  note.innerHTML +=
    "<li>トランザクションはエラーのため開けませんでした。アイテムの重複は許可されていません。</li>";
};

// トランザクションでオブジェクトストアを作成します
const objectStore = transaction.objectStore("toDoList");
// オブジェクトストアに newItem オブジェクトを追加する要求をします
const objectStoreRequest = objectStore.add(newItem[0]);

objectStoreRequest.onsuccess = (event) => {
  note.innerHTML += "<li>要求は成功しました。</li>";
};

仕様書

Specification
Indexed Database API 3.0
# object-store-interface

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
IDBObjectStore
add
autoIncrement
clear
count
createIndex
options.locale parameter
DeprecatedNon-standard
delete
deleteIndex
get
getAll
getAllKeys
getKey
index
indexNames
keyPath
name
Renaming through name setter
openCursor
openKeyCursor
put
transaction
Available in workers

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.
Requires a vendor prefix or different name for use.
Has more compatibility info.

関連情報