IDBObjectStore: openCursor() メソッド
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
IDBObjectStore インターフェイスの openCursor() メソッドは、IDBRequest オブジェクトを返し、別スレッドで新しい IDBCursorWithValue オブジェクトを返します。カーソルを用いてオブジェクトストアを走査するのに用います。
追加を行う操作が正常に完了したかを判定するには、結果の success イベントを監視してください。
メモ: この機能はウェブワーカー内で利用可能です。
構文
openCursor()
openCursor(query)
openCursor(query, direction)
引数
query省略可-
問い合わせを行うキーまたは
IDBKeyRangeです。単一の有効なキーが渡された場合は、そのキーのみを含む範囲になります。何も渡されない場合は、オブジェクトストア内の全レコードを選択するキー範囲になります。 direction省略可-
カーソルが動く方向を決める文字列です。デフォルトは
nextです。以下の値が有効です。next-
カーソルはオブジェクトストアの最初で開き、キーの昇順で重複を含むすべてのレコードを返します。
nextunique-
カーソルはオブジェクトストアの最初で開き、キーの昇順で重複を除いたすべてのレコードを返します。
prev-
カーソルはオブジェクトストアの最初で開き、キーの降順で重複を含むすべてのレコードを返します。
prevunique-
カーソルはオブジェクトストアの最初で開き、キーの降順で重複を除いたすべてのレコードを返します。
返値
この操作に関係する今後のイベントが発火する IDBRequest オブジェクトです。
操作に成功した場合は、この要求の result プロパティの値は以下になります。
- 与えられたクエリーにマッチする最初のレコードを指す
IDBCursorWithValueオブジェクト - マッチするレコードが見つからなかった場合は
null
例外
このメソッドは、以下の種類のいずれかの DOMException を投げる可能性があります。
InvalidStateErrorDOMException-
この
IDBObjectStoreまたはIDBIndexが削除済のとき投げられます。 TransactionInactiveErrorDOMException-
この
IDBObjectStoreのトランザクションが実行中でないとき投げられます。 DataErrorDOMException-
指定されたキーまたはキー範囲が無効であるとき投げられます。
例
以下のシンプルな断片では、トランザクションを生成し、オブジェクトストアを取得し、カーソルを用いてオブジェクトストア内の全レコードを走査します。
const transaction = db.transaction("name", "readonly");
const objectStore = transaction.objectStore("name");
const request = objectStore.openCursor();
request.onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
// cursor.value に走査中の現在のレコードが入っている
// ここで結果を用いて何かする
cursor.continue();
} else {
// もう結果は無い
}
};
仕様書
| 仕様書 |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbobjectstore-opencursor②> |
ブラウザーの互換性
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase - トランザクションの使用:
IDBTransaction - キー範囲の設定:
IDBKeyRange - データの取得と変更:
IDBObjectStore - カーソルの使用:
IDBCursor - リファレンス例: To-do Notifications (動く例を見る)