私はindexeddbが初めてです。インデックス付きのデータベースにいくつかのオブジェクトを配置したとしましょう:
transaction.objectStore("some_store").put(some_object, some_key);
ここで、そのオブジェクト ストアからすべてのキーを取得したいと考えています。それは可能ですか?はいの場合、どのように?
私はindexeddbが初めてです。インデックス付きのデータベースにいくつかのオブジェクトを配置したとしましょう:
transaction.objectStore("some_store").put(some_object, some_key);
ここで、そのオブジェクト ストアからすべてのキーを取得したいと考えています。それは可能ですか?はいの場合、どのように?
クリストフが openCursor メソッドを使用して言ったように可能です。値カーソル オブジェクトの要求には逆シリアル化が含まれる可能性があるため、効率的ではありません。
put メソッドは、挿入されたオブジェクトの主キーを返すことにも注意してください。
現在、非常に効率的なキー取得が必要な場合は、インライン キー オブジェクト ストアの keyPath にインデックスを付けます。アウト オブ ライン オブジェクト ストアの場合、運が悪いです。インデックスを使用すると、次のようにキーを取得できます。
transaction.objectStore("some_store").index('id').openKeyCursor(); // here id is primary key path
openKeyCursor メソッドを直接オブジェクト ストアに要求するバグ レポートがあります。願わくば、次の IndexedDB 仕様でそれが実装されることを願っています。
すべてのレコードを 1 つずつ取得するには、openCursor メソッドを使用する必要があります。キーのみを取得することはできません。