IDBObjectStore
IndexedDB API の IDBObjectStore
インターフェイスは、データベース内のオブジェクトストアを表します。オブジェクトストア内のレコードは、キーによってソートされています。ソートしておくことで、高速な挿入、検索、そして順番での取り出しを可能にします。
メモ: この機能はウェブワーカー内で利用可能です。
インスタンスプロパティ
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 アプリケーションを参照してください。(動く例を見る)
// 我々のデータベースを開きましょう
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 |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キーの範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)