IDBObjectStore: delete() メソッド

IDBObjectStore インターフェイスの delete() メソッドは、IDBRequest オブジェクトを返し、別スレッドで指定のレコードまたはレコード群を削除します。

キーまたは IDBKeyRange を渡すことができ、これによってオブジェクトストアから 1 個または複数のレコードを削除できます。オブジェクトストア内の全レコードを削除するには、IDBObjectStore.clear を使用してください。

IDBCursor を使用している場合は、IDBCursor.delete() メソッドを用いることで現在のレコードをより効率よく削除できることを覚えておいてください。この方法では、レコードのキーを明示的に検索せずにすみます。

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

構文

js
delete(key)

引数

key

削除するレコードのキー、もしくはキーが範囲内のレコードをすべて削除する IDBKeyRange です。

返値

この操作に関係する今後のイベントが発火する IDBRequest オブジェクトです。

操作に成功した場合は、この要求の result プロパティの値は undefined になります。

例外

このメソッドは、以下の種類のいずれかの DOMException を投げる可能性があります。

TransactionInactiveError DOMException

このオブジェクトストアのトランザクションが実行中でないとき投げられます。

ReadOnlyError DOMException

このオブジェクトストアのトランザクションのモードが読み取り専用のとき投げられます。

InvalidStateError DOMException

このオブジェクトストアが削除済のとき投げられます。

DataError DOMException

key有効なキーでもキー範囲でもないとき投げられます。

以下のコード断片では、To-do Notifications サンプルアプリケーションの一部である deleteItem() 関数を紹介しています。このアプリケーションは、to-do リストの項目を IndexedDB を用いて保存します。このアプリケーションのコード全体を GitHub で見ることも、動くアプリケーションを試すこともできます。

deleteItem() 関数は、ユーザーが to-do リストの項目を削除する項目をクリックすると呼び出されます。アイテムキーはボタンの 'data-task' データ属性で設定されるので、削除するアイテムを特定できます。この関数はデータベースのトランザクションを開き、その中でキーを指定してアイテムを削除します。トランザクションの完了時、この関数はアプリケーションの UI を更新してアイテムが削除されたことを報告します。

なお、この関数内で使われる db はアプリケーションの読み込み時に初期化され、IDBDatabase オブジェクトを参照するグローバル変数です。

js
function deleteItem(event) {
  // 削除するタスクの名前を取得する
  let dataTask = event.target.getAttribute("data-task");

  // データベースのトランザクションを開始し、タスクを上で取得した名前で検索して削除する
  let transaction = db.transaction(["toDoList"], "readwrite");
  let request = transaction.objectStore("toDoList").delete(dataTask);

  // データアイテムが削除されたことを報告する
  transaction.oncomplete = () => {
    // ボタンの親 (リストアイテム) を削除し、表示を消す
    event.target.parentNode.parentNode.removeChild(event.target.parentNode);
    note.innerHTML += `<li>タスク "${dataTask}" が削除されました。</li>`;
  };
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-delete①

ブラウザーの互換性

BCD tables only load in the browser

関連情報