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 July 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die createIndex()
Methode der IDBObjectStore
Schnittstelle erstellt und gibt ein neues IDBIndex
Objekt in der verbundenen Datenbank zurück. Es erstellt ein neues Feld beziehungsweise eine neue Spalte, die einen neuen Datenpunkt für jeden Datensatz in der Datenbank definiert.
Bitte beachten Sie, dass IndexedDB-Indizes jeden JavaScript-Datentyp enthalten können; IndexedDB verwendet den structured clone algorithm, um gespeicherte Objekte zu serialisieren, was die Speicherung einfacher und komplexer Objekte ermöglicht.
Beachten Sie, dass diese Methode nur aus einem VersionChange
Transaktionsmodus-Callback aufgerufen werden darf.
Syntax
createIndex(indexName, keyPath)
createIndex(indexName, keyPath, options)
Parameter
indexName
-
Der Name des zu erstellenden Index. 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
keyPath
zu erstellen und auch eine Sequenz (ein Array) alskeyPath
zu übergeben. options
Optional-
Ein Objekt, das die folgenden Eigenschaften enthalten kann:
unique
-
Wenn
true
, lässt der Index keine doppelten Werte für einen einzelnen Schlüssel zu. Standardmäßigfalse
. multiEntry
-
Wenn
true
, fügt der Index einen Eintrag im Index für jedes Array-Element hinzu, wenn derkeyPath
zu einem Array aufgelöst wird. Wennfalse
, wird ein einzelner Eintrag mit dem gesamten Array hinzugefügt. Standardmäßigfalse
. locale
Nicht standardisiert Veraltet-
Ermöglicht Ihnen, eine Gebietsschema für den Index festzulegen. Alle Sortieroperationen, die auf den Daten über Schlüsselbereiche durchgeführt werden, befolgen dann die Sortierregeln dieses Gebietsschemas. Sie können den Wert auf eine der folgenden Arten angeben:
string
: Ein String, der einen spezifischen Gebietsschema-Code enthält, z.B.en-US
oderpl
.auto
: Das Standardgebietsschema der Plattform wird verwendet (kann durch die Einstellungen des Benutzeragenten geändert werden).null
oderundefined
: Wenn kein Gebietsschema angegeben ist, wird die normale JavaScript-Sortierung verwendet — nicht sprachabhängig.
Rückgabewert
Ein IDBIndex
Objekt: der neu erstellte Index.
Ausnahmen
Diese Methode kann eine DOMException
einer der folgenden Typen auslösen:
ConstraintError
DOMException
-
Wird ausgelöst, wenn ein Index mit demselben Namen bereits in der Datenbank existiert. Indexnamen sind groß-/kleinschreibungssensitiv.
InvalidAccessError
DOMException
-
Wird ausgelöst, wenn der angegebene Schlüsselpfad eine Sequenz ist und
multiEntry
imobjectParameters
Objekt auftrue
gesetzt ist. InvalidStateError
DOMException
-
Wird ausgelöst, wenn:
- Die Methode nicht von einem
versionchange
Transaktionsmodus-Callback aus aufgerufen wurde, d.h. aus einemonupgradeneeded
Handler. - Der Objektspeicher gelöscht wurde.
- Die Methode nicht von einem
SyntaxError
DOMException
-
Wird ausgelöst, wenn der angegebene
keyPath
kein gültiger Schlüsselpfad ist. TransactionInactiveError
DOMException
-
Wird ausgelöst, wenn die Transaktion, zu der dieses
IDBObjectStore
gehört, nicht aktiv ist (z.B. gelöscht oder entfernt wurde.) In Firefox vor Version 41 wurde in diesem Fall ebenfalls einInvalidStateError
ausgelöst, was irreführend war; dies wurde nun behoben (siehe Firefox Bug 1176165.)
Beispiele
Im folgenden Beispiel sehen Sie, wie der onupgradeneeded
Handler verwendet wird, um die Datenbankstruktur zu aktualisieren, wenn eine Datenbank mit einer höheren Versionsnummer geladen wird. createIndex()
wird verwendet, um neue Indizes im Objektspeicher zu erstellen. Für ein vollständiges funktionierendes Beispiel sehen Sie unsere 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
Siehe auch
- Verwendung von IndexedDB
- Transaktionen starten:
IDBDatabase
- Verwendung von Transaktionen:
IDBTransaction
- Festlegen eines Schlüsselbereichs:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursoren:
IDBCursor
- Beispielreferenz: To-do Notifications (Beispiel live ansehen).