IDBObjectStore: createIndex() Methode
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.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die createIndex() Methode des
IDBObjectStore-Interfaces erstellt und gibt ein neues
IDBIndex-Objekt in der verbundenen Datenbank zurück. Sie erstellt ein neues
Feld/Spalte, die einen neuen Datenpunkt für jeden Datensatz der Datenbank darstellt.
Beachten Sie, dass IndexedDB-Indizes jedes JavaScript-Datentyp enthalten können; IndexedDB verwendet den structured clone algorithm, um gespeicherte Objekte zu serialisieren, was die Speicherung von einfachen und komplexen Objekten erlaubt.
Beachten Sie, dass diese Methode nur aus einem VersionChange-Transaktionsmodus-Callback heraus aufgerufen werden muss.
Syntax
createIndex(indexName, keyPath)
createIndex(indexName, keyPath, options)
Parameter
indexName-
Der Name des zu erstellenden Indexes. Beachten Sie, dass es möglich ist, einen Index mit einem leeren Namen zu erstellen.
keyPath-
Der Schlüsselpfad, den der Index verwenden soll. Beachten Sie, dass es möglich ist, einen Index mit einem leeren
keyPathzu erstellen, und auch eine Sequenz (Array) alskeyPathzu übergeben. optionsOptional-
Ein Objekt, das die folgenden Eigenschaften enthalten kann:
unique-
Wenn
true, erlaubt der Index keine doppelten Werte für einen einzelnen Schlüssel. Standardwert istfalse. multiEntry-
Wenn
true, wird ein Eintrag im Index für jedes Array-Element hinzugefügt, wenn derkeyPathzu einem Array aufgelöst wird. Wennfalse, wird ein einziger Eintrag mit dem Array hinzugefügt. Standardwert istfalse. localeNicht standardisiert Veraltet-
Ermöglicht die Angabe einer Lokalisierung für den Index. Alle über Schlüsselbereiche durchgeführten Sortieroperationen halten dann die Sortierregeln dieser Lokalisierung ein. Sie können seinen Wert auf eine der drei folgenden Arten angeben:
string: Eine Zeichenfolge, die einen spezifischen Lokalisierungscode enthält, z. B.en-USoderpl.auto: Die Standard-Lokalisierung der Plattform wird verwendet (kann durch Benutzereinstellungen geändert werden).nulloderundefined: Wenn keine Lokalisierung angegeben ist, wird das normale JavaScript-Sortieren verwendet - nicht lokalisierungsbewusst.
Rückgabewert
Ein IDBIndex-Objekt: der neu erstellte Index.
Ausnahmen
Diese Methode kann ein DOMException der folgenden Typen auslösen:
ConstraintErrorDOMException-
Wird ausgelöst, wenn ein Index mit demselben Namen bereits in der Datenbank existiert. Indexnamen sind groß-/klein-schreibungsempfindlich.
InvalidAccessErrorDOMException-
Wird ausgelöst, wenn der angegebene Schlüsselpfad eine Sequenz ist und
multiEntryimobjectParameters-Objekt auftruegesetzt ist. InvalidStateErrorDOMException-
Wird ausgelöst, wenn:
- Die Methode nicht aus einem
versionchange-Transaktionsmodus-Callback heraus aufgerufen wurde, d.h. aus einemonupgradeneeded-Handler. - Der Objekt-Store gelöscht wurde.
- Die Methode nicht aus einem
SyntaxErrorDOMException-
Wird ausgelöst, wenn der angegebene
keyPathkein gültiger Schlüsselpfad ist. TransactionInactiveErrorDOMException-
Wird ausgelöst, wenn die Transaktion, zu der dieses
IDBObjectStoregehört, nicht aktiv ist (z. B. gelöscht oder entfernt wurde). In Firefox vor Version 41 wurde in diesem Fall ebenfalls einInvalidStateErrorausgelöst, was irreführend war; dies wurde nun behoben (siehe Firefox Bug 1176165).
Beispiele
Im folgenden Beispiel sehen Sie
den onupgradeneeded-Handler, der verwendet wird, um die
Datenbankstruktur zu aktualisieren, wenn eine Datenbank mit einer höheren Versionsnummer geladen wird.
createIndex() wird verwendet, um neue Indizes im Objekt-Store zu erstellen. Ein
vollständiges Beispiel finden Sie in unserer To-do Notifications-App (Beispiel live ansehen).
let db;
// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
// Two event handlers for opening the database.
DBOpenRequest.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
DBOpenRequest.onsuccess = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Database initialized.";
// store the result of opening the database in the db variable.
// This is used a lot below.
db = request.result;
// Run the displayData() function to populate the task list with
// all the to-do list data already in the IDB
displayData();
};
// This handler fires when a new database is created and indicates
// either that one has not been created before, or a new version
// was submitted with window.indexedDB.open(). (See above.)
// It is only implemented in recent browsers.
DBOpenRequest.onupgradeneeded = (event) => {
const db = event.target.result;
db.onerror = (event) => {
note.appendChild(document.createElement("li")).textContent =
"Error loading database.";
};
// Create an objectStore for this database
const objectStore = db.createObjectStore("toDoList", {
keyPath: "taskTitle",
});
// define what data items the objectStore will contain
objectStore.createIndex("hours", "hours", { unique: false });
objectStore.createIndex("minutes", "minutes", { unique: false });
objectStore.createIndex("day", "day", { unique: false });
objectStore.createIndex("month", "month", { unique: false });
objectStore.createIndex("year", "year", { unique: false });
objectStore.createIndex("notified", "notified", { unique: false });
};
Spezifikationen
| Specification |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbobjectstore-createindex①> |
Browser-Kompatibilität
Loading…
Siehe auch
- Verwendung von IndexedDB
- Beginn von Transaktionen:
IDBDatabase - Verwendung von Transaktionen:
IDBTransaction - Festlegung eines Schlüsselbereichs:
IDBKeyRange - Abrufen und Anpassen Ihrer Daten:
IDBObjectStore - Verwendung von Cursorn:
IDBCursor - Referenzbeispiel: To-do Notifications (Beispiel live ansehen).