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 Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

* Some parts of this feature may have varying levels of support.

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

Die Schnittstelle IDBIndex der IndexedDB API bietet asynchronen Zugriff auf einen Index in einer Datenbank. Ein Index ist eine Art von Objekt-Store zum Nachschlagen von Datensätzen in einem anderen Objekt-Store, dem sogenannten referenzierten Objekt-Store. Diese Schnittstelle wird verwendet, um Daten abzurufen.

Sie können Datensätze in einem Objekt-Store über den Primärschlüssel oder durch die Verwendung eines Indexes abrufen. Ein Index ermöglicht es Ihnen, Datensätze in einem Objekt-Store anhand von Eigenschaften der Werte in den Datensätzen der Objekt-Stores abzurufen, die nicht der Primärschlüssel sind.

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

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

Instanz-Eigenschaften

IDBIndex.isAutoLocale Schreibgeschützt Nicht standardisiert Veraltet

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

IDBIndex.locale Schreibgeschützt Nicht standardisiert Veraltet

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

IDBIndex.name

Der Name dieses Indexes.

IDBIndex.objectStore Schreibgeschützt

Der Name des Objekt-Stores, auf den dieser Index verweist.

IDBIndex.keyPath Schreibgeschützt

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

IDBIndex.multiEntry Schreibgeschützt

Beeinflusst das Verhalten des Indexes, wenn das Ergebnis der Auswertung des Schlüsselpfads des Indexes ein Array ergibt. Wenn true, gibt es einen Datensatz im Index für jedes Element in einem Array von Schlüsseln. Wenn false, gibt es einen Datensatz für jeden Schlüssel, der ein Array ist.

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 liefert 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 Objekt-Store, 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 Objekt-Store, 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 Objekt-Store, die dem angegebenen Schlüssel entsprechen oder im Bereich liegen, wenn key ein IDBKeyRange ist.

IDBIndex.getAllRecords() Experimentell

Gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread alle übereinstimmenden Datensätze im referenzierten Objekt-Store (einschließlich Index-Schlü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 durch diesen Index angeordneten Schlüsselbereich.

Beispiel

Im folgenden Beispiel öffnen wir eine Transaktion und einen Objekt-Store, dann erhalten wir den Index lName aus einer einfachen Kontakt-Datenbank. Wir öffnen dann 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 komplett funktionierendes Beispiel sehen Sie sich unser IndexedDB-Examples-Demo-Repo 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

Specification
Indexed Database API 3.0
# index-interface

Browser-Kompatibilität

Siehe auch