IDBIndex: Methode getKey()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

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

Die getKey()-Methode der IDBIndex-Schnittstelle gibt ein IDBRequest-Objekt zurück und findet in einem separaten Thread entweder den Primärschlüssel, der dem gegebenen Schlüssel in diesem Index entspricht, oder den ersten entsprechenden Primärschlüssel, wenn key auf einen IDBKeyRange gesetzt ist.

Wenn ein Primärschlüssel gefunden wird, wird er als result des Anfrageobjekts festgelegt. Beachten Sie, dass dies nicht den gesamten Datensatz zurückgibt, wie es IDBIndex.get tut.

Syntax

js
getKey()
getKey(key)

Parameter

key Optional

Ein Schlüssel oder IDBKeyRange, der einen abzurufenden Datensatz identifiziert. Wenn dieser Wert null oder nicht vorhanden ist, verwendet der Browser einen ungebundenen Schlüsselbereich.

Rückgabewert

Ein IDBRequest-Objekt, auf dem nachfolgende Ereignisse, die sich auf diese Operation beziehen, ausgelöst werden.

Wenn die Operation erfolgreich ist, ist der Wert der result-Eigenschaft der Anfrage der Schlüssel für den ersten Datensatz, der dem gegebenen Schlüssel oder Schlüsselbereich entspricht.

Ausnahmen

Diese Methode kann eine DOMException der folgenden Typen auslösen:

TransactionInactiveError DOMException

Wird ausgelöst, wenn die Transaktion dieses IDBIndex inaktiv ist.

DataError DOMException

Wird ausgelöst, wenn der angegebene Schlüssel oder Schlüsselbereich einen ungültigen Schlüssel enthält.

InvalidStateError DOMException

Wird ausgelöst, wenn der IDBIndex gelöscht oder entfernt wurde.

Beispiele

Im folgenden Beispiel öffnen wir eine Transaktion und ein Objekt-Store, dann erhalten wir den Index lName aus einer einfachen Kontaktdatenbank. 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 dem Primärschlüssel sortiert sind.

myIndex.getKey('Bungle') wird dann verwendet, um den Primärschlüssel des Datensatzes mit einem lName von Bungle abzurufen, und das Ergebnis dieser Anfrage wird in die Konsole geloggt, wenn der Erfolgs-Callback zurückkehrt.

Schließlich durchlaufen wir jeden Datensatz und fügen die Daten in eine HTML-Tabelle ein. Für ein komplettes funktionierendes Beispiel siehe unser IndexedDB-examples Demo Repository (Beispiel live ansehen).

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

  const myIndex = objectStore.index("lName");
  const getKeyRequest = myIndex.getKey("Bungle");
  getKeyRequest.onsuccess = () => {
    console.log(getKeyRequest.result);
  };

  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
# ref-for-dom-idbindex-getkey①

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch