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 vonauto
zugewiesen wurde (siehe denoptions
-Parameter zuIDBObjectStore.createIndex()
.) IDBIndex.locale
Nur lesbar Nicht standardisiert Veraltet-
Gibt das Locale des Index zurück (zum Beispiel
en-US
oderpl
), wenn ihm bei seiner Erstellung einlocale
-Wert zugewiesen wurde (siehe denoptions
-Parameter zuIDBObjectStore.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. Wennfalse
, 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, wennkey
einIDBKeyRange
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, wennkey
einIDBKeyRange
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, wennkey
einIDBKeyRange
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, wennkey
einIDBKeyRange
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.)
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
- Verwendung von IndexedDB
- Starten von Transaktionen:
IDBDatabase
- Verwenden von Transaktionen:
IDBTransaction
- Festlegen eines Schlüsselbereichs:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwenden von Cursoren:
IDBCursor
- Referenzbeispiel: To-do Notifications (Beispiel live ansehen).