Das Hinzufügen eines Objekts zu einem IndexedDB-Objektspeicher schlägt fehl, wenn der Schlüssel bereits vorhanden ist. Wie kann ich die Existenz eines Objekts mit einem bestimmten Schlüssel überprüfen - vorzugsweise synchron (kein Grund für eine andere Ebene von Callbacks) und ohne das Objekt zu ziehen.
Ich weiß, wie man Anfragen asynchron über Transaktionen erledigen kann, aber es scheint ein bisschen eine Qual zu sein jedes Mal, wenn ich ein Objekt hinzufügen möchte.
note Lösung muss nur in Chrome funktionieren (wenn das hilft)
Bis jetzt hat keiner der Browser die Sync-API implementiert, also musst du es async machen. Ein objectStore
macht eine get
-Methode verfügbar, die Sie mit einem Schlüssel versehen, und gibt Ihnen das Objekt (oder null) zurück, das mit dem Schlüssel übereinstimmt.
Es gibt ein wirklich gutes Tutorial zu MDN, das die Verwendung von IDB behandelt, und einen Datensatz erhalten ist auch abgedeckt, aber der inline Code ist:
%Vor% Wenn Sie den Datensatz nicht abrufen möchten, können Sie immer die Methode count
für einen Index verwenden, wie in hier in der Spezifikation . Auf der Grundlage des Ergebnisses davon können Sie entweder add
oder put
verwenden, um den Datensatz zu modifizieren. Dadurch wird das Extrahieren des Datensatzes erspart, wenn dies nicht erforderlich ist.
Ein bisschen spät für eine Antwort, aber möglich, es hilft anderen. Ich stolperte immer noch - wie ich vermute - über das gleiche Problem, aber es ist sehr einfach:
Wenn Sie Datensätze EINFÜGEN oder AKTUALISIEREN möchten, verwenden Sie objectStore.put(object)
(Hilfe)
Wenn Sie nur Datensätze einfügen möchten, verwenden Sie objectStore.add(object)
(Hilfe)
Wenn Sie also add(object)
verwenden und ein Datensatzschlüssel in der Datenbank noch vorhanden ist, wird er nicht überschrieben und löst den Fehler 0 "ConstraintError: Schlüssel ist bereits im Objektspeicher vorhanden" aus
Wenn Sie put(object)
verwenden, wird es überschrieben.
Die Frage ist, warum willst du das wissen? Vielleicht sollten Sie einen anderen Ansatz verwenden?
Sie können das automatische Inkrement verwenden, damit Sie nicht prüfen müssen, ob ein Schlüssel existiert, Sie erhalten immer einen eindeutigen Schlüssel.
Sie können auch die put-Methode anstelle der add-Methode verwenden. Mit dem Put werden die Daten aktualisiert, wenn der Schlüssel existiert und wenn der Schlüssel nicht existiert, werden die Daten hinzugefügt.
Alles hängt davon ab, warum Sie überprüfen wollen, ob etwas existiert.
Tags und Links google-chrome indexeddb