IDBKeyRange

Baseline Widely available

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

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

Das IDBKeyRange-Interface der IndexedDB API repräsentiert ein kontinuierliches Intervall über einen Datentyp, der für Schlüssel verwendet wird. Datensätze können aus IDBObjectStore und IDBIndex-Objekten unter Verwendung von Schlüsseln oder einem Schlüsselbereich abgerufen werden. Sie können den Bereich mithilfe von unteren und oberen Grenzen einschränken. Zum Beispiel können Sie über alle Werte eines Schlüssels im Wertebereich von A bis Z iterieren.

Ein Schlüsselbereich kann einen einzelnen Wert oder einen Bereich mit oberen und unteren Grenzen oder Endpunkten darstellen. Wenn der Schlüsselbereich sowohl obere als auch untere Grenzen hat, ist er begrenzt; wenn er keine Grenzen hat, ist er unbegrenzt. Ein begrenzter Schlüsselbereich kann entweder offen (die Endpunkte sind ausgeschlossen) oder geschlossen (die Endpunkte sind eingeschlossen) sein. Um alle Schlüssel innerhalb eines bestimmten Bereichs abzurufen, können Sie die folgenden Codekonstruktionen verwenden:

Bereich Code
Alle Schlüssel ≥ x IDBKeyRange.lowerBound(x)
Alle Schlüssel > x IDBKeyRange.lowerBound(x, true)
Alle Schlüssel ≤ y IDBKeyRange.upperBound(y)
Alle Schlüssel < y IDBKeyRange.upperBound(y, true)
Alle Schlüssel ≥ x && ≤ y IDBKeyRange.bound(x, y)
Alle Schlüssel > x && < y IDBKeyRange.bound(x, y, true, true)
Alle Schlüssel > x && ≤ y IDBKeyRange.bound(x, y, true, false)
Alle Schlüssel ≥ x && < y IDBKeyRange.bound(x, y, false, true)
Der Schlüssel = z IDBKeyRange.only(z)

Ein Schlüssel befindet sich in einem Schlüsselbereich, wenn die folgenden Bedingungen zutreffen:

  • Der untere Wert des Schlüsselbereichs ist einer der folgenden:

    • undefined
    • Kleiner als der Schlüsselwert
    • Gleich dem Schlüsselwert, wenn lowerOpen false ist.
  • Der obere Wert des Schlüsselbereichs ist einer der folgenden:

    • undefined
    • Größer als der Schlüsselwert
    • Gleich dem Schlüsselwert, wenn upperOpen false ist.

Instanz-Eigenschaften

IDBKeyRange.lower Schreibgeschützt

Untere Grenze des Schlüsselbereichs.

IDBKeyRange.upper Schreibgeschützt

Obere Grenze des Schlüsselbereichs.

IDBKeyRange.lowerOpen Schreibgeschützt

Gibt false zurück, wenn der niedrige Grenzwert im Schlüsselbereich enthalten ist.

IDBKeyRange.upperOpen Schreibgeschützt

Gibt false zurück, wenn der obere Grenzwert im Schlüsselbereich enthalten ist.

Statische Methoden

IDBKeyRange.bound()

Erstellt einen neuen Schlüsselbereich mit oberen und unteren Grenzen.

IDBKeyRange.only()

Erstellt einen neuen Schlüsselbereich, der einen einzelnen Wert enthält.

IDBKeyRange.lowerBound()

Erstellt einen neuen Schlüsselbereich mit nur einer unteren Grenze.

IDBKeyRange.upperBound()

Erstellt einen neuen Schlüsselbereich mit nur einer oberen Grenze.

Instanz-Methoden

IDBKeyRange.includes()

Gibt einen booleschen Wert zurück, der angibt, ob ein angegebener Schlüssel innerhalb des Schlüsselbereichs liegt.

Beispiele

Das folgende Beispiel veranschaulicht, wie Sie einen Schlüsselbereich verwenden würden. Hier deklarieren wir einen keyRangeValue als Bereich zwischen den Werten "A" und "F". Wir öffnen eine Transaktion (mithilfe von IDBTransaction) und einen Objekt-Store und öffnen einen Cursor mit IDBObjectStore.openCursor, wobei wir keyRangeValue als seinen optionalen Schlüsselbereichswert deklarieren. Das bedeutet, dass der Cursor nur Datensätze mit Schlüsseln innerhalb dieses Bereichs abruft. Dieser Bereich schließt die Werte "A" und "F" ein, da wir nicht angegeben haben, dass sie offene Grenzen sein sollen. Wenn wir IDBKeyRange.bound("A", "F", true, true); verwenden würden, dann würde der Bereich "A" und "F" nicht einschließen, nur die dazwischenliegenden Werte.

Hinweis: Für ein vollständigeres Beispiel, mit dem Sie mit dem Schlüsselbereich experimentieren können, werfen Sie einen Blick auf unser IDBKeyRange-Beispiel-Repo (sehen Sie sich das Beispiel auch live an.)

js
function displayData() {
  const keyRangeValue = IDBKeyRange.bound("A", "F");

  const transaction = db.transaction(["fThings"], "readonly");
  const objectStore = transaction.objectStore("fThings");

  objectStore.openCursor(keyRangeValue).onsuccess = (event) => {
    const cursor = event.target.result;
    if (cursor) {
      const listItem = document.createElement("li");
      listItem.textContent = `${cursor.value.fThing}, ${cursor.value.fRating}`;
      list.appendChild(listItem);

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

Spezifikationen

Specification
Indexed Database API 3.0
# keyrange

Browser-Kompatibilität

Siehe auch