Получение количества объектов

Последнее обновление: 11.11.2023

Для получения количества данных, которые хранятся в хранилище базы данных, в 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(): создает диапазон ключей, для которого задано максимальное значение

Диапазоны ключей, которые создаются с помощью этих методов, можно описать следующей таблицей:

Диапазон

Код

Значение ключа >= x

IDBKeyRange.lowerBound(x)

Значение ключа > x

IDBKeyRange.lowerBound(x, true)

Значение ключа <= y

IDBKeyRange.upperBound(y)

Значение ключа < y

IDBKeyRange.upperBound(y, true)

Значение ключа >= x && <= y

IDBKeyRange.bound(x, y)

Значение ключа > x < y

IDBKeyRange.bound(x, y, true, true)

Значение ключа > x && <= y

IDBKeyRange.bound(x, y, true, false)

Значение ключа >= x &&< y

IDBKeyRange.bound(x, y, false, true)

Значение ключа = z

IDBKeyRange.only(z)

Например, получаем все объекты, у которых значение ключа не больше 2:

const countRequest = userStore.count(IDBKeyRange.upperBound(2));
countRequest.onsuccess = () => console.log("users count:", countRequest.result);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850