IDBIndex

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Das IDBIndex Interface der IndexedDB API bietet asynchronen Zugriff auf einen Index in einer Datenbank. Ein Index ist eine Art von Objektstore, der zum Nachschlagen von Datensätzen in einem anderen Objektstore verwendet wird, dem sogenannten referenzierten Objektstore. Sie nutzen dieses Interface, um Daten abzurufen.

Sie können Datensätze in einem Objektstore entweder über den Primärschlüssel oder durch Verwendung eines Indexes abrufen. Ein Index ermöglicht das Nachschlagen von Datensätzen in einem Objektstore unter Verwendung der Eigenschaften der Werte im Objektstore, die nicht der Primärschlüssel sind.

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

Sie können eine Menge von Schlüsseln innerhalb eines Bereichs abrufen. Um mehr zu erfahren, siehe IDBKeyRange.

Instanz-Eigenschaften

IDBIndex.isAutoLocale Nur lesbar Nicht standardisiert Veraltet

Gibt einen booleschen Wert zurück, der angibt, ob dem Index bei seiner Erstellung ein locale-Wert von auto zugewiesen wurde (siehe den options-Parameter zu IDBObjectStore.createIndex().)

IDBIndex.locale Nur lesbar Nicht standardisiert Veraltet

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

IDBIndex.name

Der Name dieses Indexes.

IDBIndex.objectStore Nur lesbar

Der Name des Objektstores, auf den dieser Index verweist.

IDBIndex.keyPath Nur lesbar

Der Schlüsselpfad dieses Indexes. Wenn null, wird dieser Index nicht automatisch gefüllt.

IDBIndex.multiEntry Nur lesbar

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

IDBIndex.unique Nur lesbar

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 liefert in einem separaten Thread die Anzahl der Datensätze innerhalb eines Schlüsselbereichs.

IDBIndex.get()

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread entweder den Wert im referenzierten Objektstore, der dem gegebenen 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 Objektstore, die dem gegebenen 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 Objektstore, die dem gegebenen 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 dem angegebenen Schlüsselbereich.

IDBIndex.openKeyCursor()

Gibt ein IDBRequest-Objekt zurück und erstellt in einem separaten Thread einen Cursor über dem angegebenen Schlüsselbereich, so wie es dieser Index organisiert.

Beispiel

Im folgenden Beispiel öffnen wir eine Transaktion und einen Objektstore und holen dann den Index lName aus einer einfachen Kontaktdatenbank. Anschließend öffnen wir einen grundlegenden Cursor 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 und nicht auf dem Primärschlüssel sortiert sind.

Schließlich iterieren wir durch jeden Datensatz und fügen die Daten in eine HTML-Tabelle ein. Für ein vollständiges funktionierendes Beispiel siehe unser IndexedDB-examples Demo-Repo (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

Specification
Indexed Database API 3.0
# index-interface

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch