Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

IDBIndex

Baseline Weitgehend verfügbar *

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Das IDBIndex-Interface der IndexedDB API bietet asynchronen Zugriff auf einen Index in einer Datenbank. Ein Index ist eine Art Objektspeicher zum Auffinden von Datensätzen in einem anderen Objektspeicher, der als referenzierter Objektspeicher bezeichnet wird. Sie verwenden dieses Interface, um Daten abzurufen.

Sie können Datensätze in einem Objektspeicher über den Primärschlüssel oder durch die Verwendung eines Index abrufen. Ein Index ermöglicht es, Datensätze in einem Objektspeicher anhand der Eigenschaften der Werte in den Datensätzen der Objektspeicher zu suchen, die nicht der Primärschlüssel sind.

Der Index ist ein persistenter Schlüssel-Wert-Speicher, bei dem der Wertteil seiner Datensätze der Schlüsselteil eines Datensatzes im referenzierten Objektspeicher ist. Die Datensätze in einem Index werden automatisch gefüllt, wann immer Datensätze im referenzierten Objektspeicher eingefügt, aktualisiert oder gelöscht werden. Jeder Datensatz in einem Index kann auf nur einen Datensatz in seinem referenzierten Objektspeicher verweisen, aber mehrere Indizes können denselben Objektspeicher referenzieren. Wenn sich der Objektspeicher ändert, werden alle Indizes, die auf den Objektspeicher verweisen, automatisch aktualisiert.

Sie können eine Menge von Schlüsseln innerhalb eines Bereichs erfassen. Um mehr zu erfahren, sehen Sie sich IDBKeyRange an.

Instanz-Eigenschaften

IDBIndex.isAutoLocale Schreibgeschützt

Gibt einen booleschen Wert zurück, der angibt, ob der Index bei seiner Erstellung einen locale-Wert von auto hatte (siehe den options-Parameter für IDBObjectStore.createIndex().)

IDBIndex.locale Schreibgeschützt

Gibt die Locale des Index zurück (zum Beispiel en-US oder pl), wenn bei seiner Erstellung ein locale-Wert angegeben wurde (siehe den options-Parameter für IDBObjectStore.createIndex().)

IDBIndex.name

Der Name dieses Index.

IDBIndex.objectStore Schreibgeschützt

Der Name des vom Index referenzierten Objektspeichers.

IDBIndex.keyPath Schreibgeschützt

Der key path dieses Index. Wenn null, wird dieser Index nicht automatisch gefüllt.

IDBIndex.multiEntry Schreibgeschützt

Beeinflusst, wie der Index sich verhält, wenn das Ergebnis der Bewertung des key path-Indexes ein Array ergibt. Wenn true, gibt es für jedes Element in einem Array von Schlüsseln einen Datensatz im Index. Wenn false, gibt es für jeden Schlüssel, der ein Array ist, einen Datensatz.

IDBIndex.unique Schreibgeschützt

Wenn true, erlaubt dieser Index keine doppelten Werte für einen Schlüssel.

Instanz-Methoden

Erbt von: EventTarget

IDBIndex.count()

Gibt ein IDBRequest-Objekt zurück und gibt in einem separaten Thread die Anzahl der Datensätze innerhalb eines Schlüsselbereichs zurück.

IDBIndex.get()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread entweder den Wert im referenzierten Objektspeicher, der dem angegebenen Schlüssel entspricht, oder den ersten entsprechenden Wert, wenn key ein IDBKeyRange ist.

IDBIndex.getKey()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread entweder den angegebenen Schlüssel oder den Primärschlüssel, wenn key ein IDBKeyRange ist.

IDBIndex.getAll()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread alle übereinstimmenden Werte im referenzierten Objektspeicher, die dem angegebenen Schlüssel entsprechen oder im Bereich liegen, wenn key ein IDBKeyRange ist.

IDBIndex.getAllKeys()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread alle übereinstimmenden Schlüssel im referenzierten Objektspeicher, die dem angegebenen Schlüssel entsprechen oder im Bereich liegen, wenn key ein IDBKeyRange ist.

IDBIndex.getAllRecords()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread alle übereinstimmenden Datensätze im referenzierten Objektspeicher (einschließlich Indexschlüssel, Primärschlüssel und Werte), die dem angegebenen Schlüssel entsprechen oder im Bereich liegen, wenn key ein IDBKeyRange ist.

IDBIndex.openCursor()

Gibt ein IDBRequest-Objekt zurück und erstellt in einem separaten Thread einen Cursor über den angegebenen Schlüsselbereich.

IDBIndex.openKeyCursor()

Gibt ein IDBRequest-Objekt zurück und erstellt in einem separaten Thread einen Cursor über den angegebenen Schlüsselbereich, wie von diesem Index angeordnet.

Beispiel

Im folgenden Beispiel öffnen wir eine Transaktion und einen Objektspeicher und erhalten dann den Index lName aus einer einfachen Kontaktdatenbank. Wir öffnen dann einen Basiscursor auf dem Index mit IDBIndex.openCursor — dies funktioniert genauso wie das Öffnen eines Cursors direkt auf einem ObjectStore mit IDBObjectStore.openCursor, außer dass die zurückgegebenen Datensätze basierend auf dem Index sortiert sind, nicht auf dem Primärschlüssel.

Schließlich iterieren wir durch jeden Datensatz und fügen die Daten in eine HTML-Tabelle ein. Für ein vollständiges funktionierendes Beispiel sehen Sie sich unser IndexedDB-examples Demo-Repository an (Beispiel live ansehen.)

js
function displayDataByIndex() {
  tableEntry.textContent = "";
  const transaction = db.transaction(["contactsList"], "readonly");
  const objectStore = transaction.objectStore("contactsList");

  const myIndex = objectStore.index("lName");
  myIndex.openCursor().onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const tableRow = document.createElement("tr");
      for (const cell of [
        cursor.value.id,
        cursor.value.lName,
        cursor.value.fName,
        cursor.value.jTitle,
        cursor.value.company,
        cursor.value.eMail,
        cursor.value.phone,
        cursor.value.age,
      ]) {
        const tableCell = document.createElement("td");
        tableCell.textContent = cell;
        tableRow.appendChild(tableCell);
      }
      tableEntry.appendChild(tableRow);

      cursor.continue();
    } else {
      console.log("Entries all displayed.");
    }
  };
}

Spezifikationen

Spezifikation
Indexed Database API 3.0
# index-interface

Browser-Kompatibilität

Siehe auch