indexeddb получить все ключи из хранилища объектов
Я новичок в indexeddb. Допустим, я поместил несколько объектов в индексированную базу данных:
transaction.objectStore("some_store").put(some_object, some_key);
Теперь я хочу получить все ключи из этого хранилища объектов. Это возможно? Если да, то как?
3 ответа
Возможно, как сказал Кристоф, используя метод openCursor. Это неэффективно, потому что запрос объекта курсора значения может включать десериализацию.
Следует также отметить, что ваш метод put возвращает первичный ключ вставленного объекта.
В настоящее время, если вы хотите очень эффективное получение ключей, индексируйте keyPath для встроенного хранилища объектов ключей. Для внепланового хранилища объектов вам не повезло. Используя индекс, вы можете получить ключи следующим образом:
transaction.objectStore("some_store").index('id').openKeyCursor(); // here id is primary key path
Есть отчет об ошибке для запроса метода openKeyCursor напрямую к хранилищу объектов. Надеюсь, следующая спецификация IndexedDB будет иметь его.
Существует метод: IDBObjectStore.getAllKeys (), который возвращает все ключи из хранилища объектов.
Для получения дополнительной информации об этом методе см.: https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAllKeys
Вы можете использовать это с методом IDBObjectStore.getAll() и объединить результаты.
Недостатком является то, что между хранилищами этих методов не должно быть никаких данных.
Вам нужно будет использовать метод openCursor для извлечения всех записей 1 на 1. Только получение ключей невозможно.