0Pricing
JavaScript Academy · Aula

Índices e consultas

Consulte dados com eficiência usando índices.

Índices e consultas é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

Por que usar índices?

Por padrão, só é possível procurar registros pela chave primária. Um índice permite consultar outra propriedade com eficiência, como encontrar todos os usuários com determinado sobrenome.

Criando um índice

Crie índices dentro de onupgradeneeded, logo depois de criar o store, usando store.createIndex(name, keyPath, options).

request.onupgradeneeded = (e) => {
  const db = e.target.result;
  const store = db.createObjectStore('users', { keyPath: 'id' });
  store.createIndex('byEmail', 'email', { unique: true });
};

Único ou não único

A opção unique garante que nenhum par de registros compartilhe o mesmo valor de índice. Use unique: false (o padrão) quando vários registros puderem compartilhar um valor, como uma cidade.

store.createIndex('byCity', 'city', { unique: false });
store.createIndex('byEmail', 'email', { unique: true });

Consultando por meio de um índice

Obtenha o índice de um store dentro de uma transaction e chame get ou getAll nele usando o valor da propriedade indexada.

const tx = db.transaction('users', 'readonly');
const index = tx.objectStore('users').index('byEmail');
const req = index.get('ada@example.com');
req.onsuccess = () => console.log(req.result);

getAll

getAll() retorna todos os registros correspondentes como um vetor em uma única requisição, sendo mais simples do que percorrer os registros com um cursor quando o conjunto de resultados é moderado.

const index = store.index('byCity');
const req = index.getAll('Paris');
req.onsuccess = () => {
  console.log('found', req.result.length, 'users in Paris');
};

Intervalos de chaves

Um IDBKeyRange descreve um intervalo de chaves para consultas por intervalo. Entre os auxiliares estão only, lowerBound, upperBound e bound.

const range = IDBKeyRange.bound(18, 65); // ages 18..65
const index = store.index('byAge');
index.getAll(range);

Opções de limite

IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen) pode excluir os pontos extremos. Limites abertos são exclusivos.

// 18 inclusive, 65 exclusive:
const range = IDBKeyRange.bound(18, 65, false, true);
// lowerBound(10) => keys >= 10
// upperBound(10, true) => keys < 10

Cursores

Para conjuntos grandes de resultados ou iteração personalizada, abra um cursor com index.openCursor(range). Ele visita os registros correspondentes um por vez, para que você não precise carregar tudo na memória.

const req = store.index('byCity').openCursor();
req.onsuccess = (e) => {
  const cursor = e.target.result;
  if (cursor) {
    console.log(cursor.value);
    cursor.continue(); // move to next match
  }
};

Contando correspondências

index.count(range) retorna quantos registros correspondem à consulta sem recuperá-los, o que é rápido e consome pouca memória.

const req = store.index('byCity').count('Paris');
req.onsuccess = () => console.log('count:', req.result);

Obtendo apenas as chaves

getAllKeys e um cursor de chaves retornam apenas as chaves primárias dos registros correspondentes, o que é útil quando você precisa somente de referências, não dos objetos completos.

const req = store.index('byCity').getAllKeys('Paris');
req.onsuccess = () => console.log('keys:', req.result);

Recapitulação das consultas

Os índices transformam o IndexedDB em um armazenamento consultável: crie-os em onupgradeneeded e use get, getAll, intervalos de chaves e cursores para buscar exatamente os registros necessários.

Verificação rápida

Teste sua compreensão sobre índices e consultas.

Recapitulação

Você aprendeu sobre índices e consultas:

  • Crie índices em onupgradeneeded com createIndex.
  • A opção unique garante valores distintos.
  • Faça consultas usando index.get / getAll.
  • IDBKeyRange permite fazer consultas por intervalo.
  • Os cursores percorrem conjuntos grandes; count contabiliza as correspondências.

Em seguida, veremos versionamento e atualizações.

Perguntas Frequentes

A aula “Índices e consultas” é grátis?

Sim — o texto completo de “Índices e consultas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Índices e consultas”?

Consulte dados com eficiência usando índices. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Índices e consultas”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Abrindo um banco de dados
  2. Transações e CRUD
  3. Índices e consultas
  4. Versionamento e atualizações
← Voltar para JavaScript Academy