Obtendo a Quantidade de Registros no Armazenamento IndexedDB API - 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 result do objeto IDBRequest conterá o número de registros encontrados.

  • error: Quando ocorre um erro, o atributo error do objeto IDBRequest 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 superior

  • IDBKeyRange.only(): Cria um intervalo que contém apenas um valor

  • IDBKeyRange.lowerBound(): Cria um intervalo com um limite inferior

  • IDBKeyRange.upperBound(): Cria um intervalo com um limite superior

Tabela de Intervalos de Chaves

IntervaloCódigoDescrição
>= xIDBKeyRange.lowerBound(x) Valores de chave maiores ou iguais a x.
> xIDBKeyRange.lowerBound(x, true) Valores de chave maiores que x.
<= yIDBKeyRange.upperBound(y) Valores de chave menores ou iguais a y.
< yIDBKeyRange.upperBound(y, true) Valores de chave menores que y.
>= x && <= yIDBKeyRange.bound(x, y) Valores entre x e y, inclusivos.
> x && < yIDBKeyRange.bound(x, y, true, true) Valores entre x e y, exclusivos.
> x && <= yIDBKeyRange.bound(x, y, true, false) Valores maiores que x e menores ou iguais a y.
>= x && < yIDBKeyRange.bound(x, y, false, true) Valores maiores ou iguais a x e menores que y.
= zIDBKeyRange.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.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com