Ich habe ein Problem mit IndexedDB. Ich möchte einen der eindeutigen Indizes zwischen allen Datensätzen innerhalb einer Transaktion austauschen, aber die Transaktionen werden fehlschlagen, weil die eindeutige Einschränkung eines Datensatzes verletzt wird. Das ist seltsam für mich, weil ich in dieser Transaktion den Index, der verletzt wird, umgeschrieben habe.Auslagern von Indizes zwischen Datensätzen innerhalb einer Transaktion
Ist das ein Fehler von IndexedDB oder mache ich etwas falsch? Hier
ist ein Beispiel:
Start Indizes:
[
{
id: 1,
id2: 1
},
{
id: 2,
id2: 2
},
{
id: 3,
id2: 3
},
{
id: 4,
id2: 4
}
]
Mutation Indizes:
[
{
id: 1,
id2: 4
},
{
id: 2,
id2: 3
},
{
id: 3,
id2: 2
},
{
id: 4,
id2: 1
}
]
Die Transaktion wird scheitern, weil id2
auf id
nicht eindeutig zuzuordnen sind, da id
4 bereits ihre id2
auf 4 setzen.
Können Sie ein Codebeispiel hinzufügen? Es ist schwierig, genau zu sagen, was Sie versuchen (z. B. Löschen und erneutes Hinzufügen der Datensätze?). Wenn Sie den Index neu schreiben, frage ich mich, ob Sie dies in einer Upgrade-Transaktion tun und einen neuen Index löschen/erstellen. Tritt dasselbe Verhalten in allen Browsern auf? –
Wenn ich dies noch einmal anschaue, frage ich mich, ob Sie annehmen, dass die Eindeutigkeitsbeschränkung nur angewendet wird, wenn die Transaktion festgeschrieben wird. Das ist nicht korrekt - die Einschränkung wird bei jeder Anfrage erzwungen. Das Setzen von zwei Werten mit vertauschten Indexschlüsseln würde beim ersten Setzen fehlschlagen. Es wird notwendig sein, einen zu löschen, den zweiten zu aktualisieren und dann den (aktualisierten) zuerst neu zu setzen. –
Ja, das war meine Annahme. Ich dachte, wenn eine Transaktion verwendet würde, wäre das System in der Lage herauszufinden, dass die Einschränkung nicht verletzt wird, da der referenzierende Datensatz ebenfalls aktualisiert wurde. Hier ist das von Ihnen angeforderte Muster. Sorry für die späte Antwort: http://codepen.io/kkirby/pen/mAbrLR?editors=0010 – Kyle