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.)
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
- Verwendung von IndexedDB
- Transaktionen starten:
IDBDatabase
- Verwendung von Transaktionen:
IDBTransaction
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursors:
IDBCursor
- Referenzbeispiel: To-do Benachrichtigungen (Beispiel live ansehen).