Для получения количества данных, которые хранятся в хранилище базы данных, в IndexDB применяется метод count() интерфейса
IDBObjectStore
count() count(query)
Если параметр не передается, то метод возвращает общее количество записей хранилища.
Этот метод возвращает объект IDBRequest. Если метод выполняется успешно, то для объекта IDBRequest генерируется событие success, а его свойство result содержит количество объектов хранилища. В случае возникновения ошибки у объекта IDBRequest срабатывает событие error, а его свойство error содержит информацию об ошибке. Для обработки этих событий можно использовать соответственно свойства onsuccess и onerror
Например, получим общее количество объектов из хранилища "users" базы данных test:
const request = indexedDB.open("test", 5); // подключаемся к бд test // при создании или изменении версии базы данных создаем в ней хранилище users request.onupgradeneeded = (event) => { const db = event.target.result; // получаем бд // ключом является свойство id, и оно автоматически инкрементируется const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true }); // добавление начальных данных userStore.add({name: "Tom", age: 39}); userStore.add({name: "Bob", age: 43}); userStore.add({name: "Sam", age: 28}); }; // при открытии базы данных получаем количество объектов request.onsuccess = (event) => { const db = event.target.result; // получаем бд const transaction = db.transaction(["users"], "readwrite"); // создаем транзакцию const userStore = transaction.objectStore("users"); // получаем хранилище users const countRequest = userStore.count(); // получаем количество объект в бд // при успешном получении выводим количество на консоль countRequest.onsuccess = () => console.log("users count:", countRequest.result); countRequest.onerror = () => console.log(countRequest.error.message); };
И консоль выведет
users count: 3
В качестве необязательного параметра query
в метод count()
передается значение ключа или объект IDBKeyRange, который задает диапазон ключей. Дополнительно параметр count
позволяет задать максимальное количество элементов в выборке.
Для создания диапазона ключей применяются следуюшие статические методы интерфейса IDBKeyRange:
IDBKeyRange.bound()
: создает диапазон ключей, для которого задано минимальное и максимальное значения
IDBKeyRange.only()
: создает диапазон ключей, который содержит только одно значение
IDBKeyRange.lowerBound()
: создает диапазон ключей, для которого задано минимальное значение
IDBKeyRange.upperBound()
: создает диапазон ключей, для которого задано максимальное значение
Диапазоны ключей, которые создаются с помощью этих методов, можно описать следующей таблицей:
Диапазон |
Код |
Значение ключа >= |
|
Значение ключа > |
|
Значение ключа <= |
|
Значение ключа < |
|
Значение ключа >= |
|
Значение ключа > |
|
Значение ключа > |
|
Значение ключа >= |
|
Значение ключа = |
|
Например, получаем все объекты, у которых значение ключа не больше 2:
const countRequest = userStore.count(IDBKeyRange.upperBound(2)); countRequest.onsuccess = () => console.log("users count:", countRequest.result);