Indici e query
Interroghi i dati in modo efficiente con gli indici.
Indici e query è una lezione JavaScript Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento JavaScript Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso JavaScript Academy include 4 lezioni in totale.
Perché usare gli indici?
Per impostazione predefinita, è possibile cercare i record solo tramite la chiave primaria. Un indice consente di eseguire query in modo efficiente usando un'altra proprietà, ad esempio per trovare tutti gli utenti con un determinato cognome.
Creare un indice
Crei gli indici all'interno di onupgradeneeded, subito dopo aver creato l'object 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 });
};Univoco e non univoco
L'opzione unique impone che nessun record condivida lo stesso valore dell'indice con un altro record. Utilizzi unique: false (il valore predefinito) quando più record possono condividere un valore, ad esempio una città.
store.createIndex('byCity', 'city', { unique: false });
store.createIndex('byEmail', 'email', { unique: true });Eseguire query tramite un indice
Ottenga l'indice da un object store all'interno di una transazione, quindi chiami get o getAll su di esso usando il valore della proprietà indicizzata.
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() restituisce ogni record corrispondente come array con un'unica richiesta; per insiemi di risultati moderati è più semplice che iterare con un cursore.
const index = store.index('byCity');
const req = index.getAll('Paris');
req.onsuccess = () => {
console.log('found', req.result.length, 'users in Paris');
};Intervalli di chiavi
Un IDBKeyRange descrive un intervallo di chiavi per le query per intervallo. Tra i metodi di supporto ci sono only, lowerBound, upperBound e bound.
const range = IDBKeyRange.bound(18, 65); // ages 18..65
const index = store.index('byAge');
index.getAll(range);Opzioni degli intervalli
IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen) può escludere gli estremi. Gli intervalli aperti sono esclusivi.
// 18 inclusive, 65 exclusive:
const range = IDBKeyRange.bound(18, 65, false, true);
// lowerBound(10) => keys >= 10
// upperBound(10, true) => keys < 10Cursori
Per insiemi di risultati grandi o per un'iterazione personalizzata, apra un cursore con index.openCursor(range). Il cursore visita i record corrispondenti uno alla volta, evitando di caricarli tutti in memoria.
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
}
};Contare le corrispondenze
index.count(range) restituisce il numero di record corrispondenti senza recuperarli: è un'operazione rapida e con un consumo ridotto di memoria.
const req = store.index('byCity').count('Paris');
req.onsuccess = () => console.log('count:', req.result);Ottenere solo le chiavi
getAllKeys e un cursore delle chiavi restituiscono solo le chiavi primarie dei record corrispondenti, una soluzione utile quando servono solo riferimenti e non gli oggetti completi.
const req = store.index('byCity').getAllKeys('Paris');
req.onsuccess = () => console.log('keys:', req.result);Riepilogo delle query
Gli indici trasformano IndexedDB in un archivio interrogabile: li crei in onupgradeneeded, quindi usi get, getAll, gli intervalli di chiavi e i cursori per recuperare esattamente i record necessari.
Verifica rapida
Metta alla prova la Sua comprensione degli indici e delle query.
Riepilogo
Ha imparato a usare gli indici e le query:
- Crei gli indici in
onupgradeneededconcreateIndex. - L'opzione
uniqueimpone valori distinti. - Esegua query tramite
index.get/getAll. IDBKeyRangeconsente di eseguire query per intervallo.- I cursori iterano gli insiemi grandi;
countconta le corrispondenze.
Ora vediamo la gestione delle versioni e gli aggiornamenti.
Domande Frequenti
La lezione «Indici e query» è gratuita?
Sì — il testo completo di «Indici e query» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso JavaScript Academy, passa a CoddyKit PRO. Il corso JavaScript Academy include 4 lezioni in totale.
Cosa imparerò in «Indici e query»?
Interroghi i dati in modo efficiente con gli indici. Eserciti JavaScript Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare JavaScript Academy?
Non è richiesta alcuna esperienza precedente. JavaScript Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Indici e query»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione JavaScript Academy?
Sì. Ogni lezione JavaScript Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.