Obtendo a Quantidade de Registros com o IndexedDB em JavaScript
No IndexedDB, o método count()
da interface IDBObjectStore
é utilizado para determinar a quantidade de registros armazenados em um armazenamento.
Sintaxe:
count();
count(IDBKeyRange);
Se nenhum parâmetro for fornecido, o método retorna o número total de registros no armazenamento. Quando o parâmetro é utilizado, ele pode ser um valor de chave específico ou um objeto IDBKeyRange
, que define um intervalo de chaves.
O método count()
retorna um objeto IDBRequest
. Dependendo do resultado da operação, ocorrem os seguintes eventos:
success
: Quando a operação é bem-sucedida, o atributo re``sult do objetoIDBRequest
conterá o número de registros encontrados.error
: Quando ocorre um erro, o atributoerror
do objetoIDBRequest
fornecerá detalhes sobre o problema.
Para tratar esses eventos, podem ser utilizadas as propriedades onsuccess
e onerror
O exemplo abaixo ilustra como obter o número total de registros em um armazenamento chamado "users"
dentro de um banco de dados chamado "test"
:
const request = indexedDB.open("test", 5); // Abre ou cria o banco de dados "test"
// Cria o armazenamento "users" durante a configuração inicial ou atualização do banco de dados
request.onupgradeneeded = (event) => {
const db = event.target.result; // Obtém a instância do banco de dados
// Cria o armazenamento com a chave primária "id" e incremento automático
const userStore = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
// Adiciona registros iniciais
userStore.add({ name: "Tom", age: 39 });
userStore.add({ name: "Bob", age: 43 });
userStore.add({ name: "Sam", age: 28 });
};
// Após a abertura do banco de dados, obtém o número total de registros
request.onsuccess = (event) => {
const db = event.target.result; // Obtém a instância do banco de dados
const transaction = db.transaction(["users"], "readonly"); // Cria uma transação de leitura
const userStore = transaction.objectStore("users"); // Obtém o armazenamento "users"
const countRequest = userStore.count(); // Obtém a contagem total de registros
// Em caso de sucesso, exibe o número total no console
countRequest.onsuccess = () => console.log("Número de usuários:", countRequest.result);
// Em caso de erro, exibe a mensagem de erro no console
countRequest.onerror = () => console.error("Erro ao contar registros:", countRequest.error.message);
};
Saída no console:
Número de usuários: 3
Uso do Parâmetro query no Método count()
O método count()
permite passar um parâmetro opcional, chamado query
, que pode ser:
- Um valor de chave específico: Conta apenas registros com essa chave.
- Um intervalo de chaves (
IDBKeyRange
): Restringe a contagem a registros cujas chaves estejam dentro do intervalo especificado.
IDBKeyRange
A interface IDBKeyRange
fornece métodos estáticos para criar intervalos de chaves, como:
IDBKeyRange.bound()
: Cria um intervalo com limites inferior e superiorIDBKeyRange.only()
: Cria um intervalo que contém apenas um valorIDBKeyRange.lowerBound()
: Cria um intervalo com um limite inferiorIDBKeyRange.upperBound()
: Cria um intervalo com um limite superior
Tabela de Intervalos de Chaves
Intervalo | Código | Descrição |
---|---|---|
>= x | IDBKeyRange.lowerBound(x) | Valores de chave maiores ou iguais a x . |
> x | IDBKeyRange.lowerBound(x, true) | Valores de chave maiores que x . |
<= y | IDBKeyRange.upperBound(y) | Valores de chave menores ou iguais a y . |
< y | IDBKeyRange.upperBound(y, true) | Valores de chave menores que y . |
>= x && <= y | IDBKeyRange.bound(x, y) | Valores entre x e y , inclusivos. |
> x && < y | IDBKeyRange.bound(x, y, true, true) | Valores entre x e y , exclusivos. |
> x && <= y | IDBKeyRange.bound(x, y, true, false) | Valores maiores que x e menores ou iguais a y . |
>= x && < y | IDBKeyRange.bound(x, y, false, true) | Valores maiores ou iguais a x e menores que y . |
= z | IDBKeyRange.only(z) | Valores iguais a z . |
No exemplo abaixo, contamos os registros onde a chave é menor ou igual a 2:
const countRequest = userStore.count(IDBKeyRange.upperBound(2));
countRequest.onsuccess = () => console.log("Número de usuários com chave <= 2:", countRequest.result);
countRequest.onerror = () => console.error("Erro ao contar registros:", countRequest.error.message);
Neste caso, o intervalo é definido pelo método IDBKeyRange.upperBound(2)
, que inclui todos os registros com chave menor ou igual a 2
.
Documentação oficial: