JavaScript Academy · Lektion

Index och frågor

Ställ effektiva frågor mot data med index.

Lektion 3 av 413 steg

Index och frågor är en gratis lektion i JavaScript Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för JavaScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i JavaScript Academy innehåller totalt 4 lektioner.

Varför index?

Som standard kan poster bara slås upp med hjälp av sin primärnyckel. Ett index gör det möjligt att effektivt söka med hjälp av en annan egenskap, till exempel hitta alla användare med ett visst efternamn.

Skapa ett index

Skapa index i onupgradeneeded, direkt efter att objektlagret har skapats, med 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 });
};

Unika och icke-unika index

Alternativet unique kräver att inga två poster har samma indexvärde. Använd unique: false (standardvärdet) när många poster kan ha samma värde, till exempel en stad.

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

Söka via ett index

Hämta indexet från ett objektlager i en transaktion och anropa sedan get eller getAll på det med värdet för den indexerade egenskapen.

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() returnerar alla matchande poster som en array i en enda begäran, vilket är enklare än att iterera med en cursor för måttligt stora resultatmängder.

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

Nyckelintervall

En IDBKeyRange beskriver ett intervall av nycklar för intervallfrågor. Hjälpfunktionerna omfattar only, lowerBound, upperBound och bound.

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

Alternativ för intervallgränser

IDBKeyRange.bound(lower, upper, lowerOpen, upperOpen) kan utesluta ändpunkterna. Öppna gränser är exkluderande.

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

Cursorer

För stora resultatmängder eller anpassad iteration kan ni öppna en cursor med index.openCursor(range). Den besöker matchande poster en i taget, så att allt inte behöver läsas in i minnet.

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
  }
};

Räkna matchningar

index.count(range) returnerar antalet matchande poster utan att hämta dem, vilket går snabbt och kräver lite minne.

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

Hämta endast nycklar

getAllKeys och en nyckelcursor returnerar endast primärnycklarna för matchande poster, vilket är användbart när ni bara behöver referenser och inte hela objekt.

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

Sammanfattning av frågor

Med index blir IndexedDB ett frågebart lager: skapa index i onupgradeneeded och använd sedan get, getAll, nyckelintervall och cursorer för att hämta exakt de poster ni behöver.

Snabbtest

Testa er förståelse av index och frågor.

Sammanfattning

Ni har lärt er om index och frågor:

  • Skapa index i onupgradeneeded med createIndex.
  • Alternativet unique kräver unika värden.
  • Ställ frågor via index.get / getAll.
  • IDBKeyRange möjliggör intervallfrågor.
  • Cursorer itererar över stora mängder; count räknar matchningarna.

Nästa steg är versionshantering och uppgraderingar.

Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
59
Lektioner
200

Vanliga frågor

Är lektionen ”Index och frågor” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen JavaScript Academy, inklusive ”Index och frågor”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i JavaScript Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Index och frågor”?

Ställ effektiva frågor mot data med index. Ni övar på JavaScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig JavaScript Academy?

Du behöver inga förkunskaper. Utbildningen i JavaScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Index och frågor”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här JavaScript Academy-lektionen?

Ja. Varje JavaScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Öppna en databas
  2. Transaktioner och CRUD
  3. Index och frågor
  4. Versionshantering och uppgraderingar
← Tillbaka till JavaScript Academy