Ich hätte gerne eine Liste, die im Grunde eine gekappte Liste in einem DynamoDB-Element ist. Ich möchte in der Lage sein, ein Element an den Anfang der Liste voranzustellen, und dann das Element von der Rückseite ablegen, wenn es eine bestimmte Größe überschreitet.Liste hinzufügen und abschneiden in einzelnen DynamoDB Update-Vorgang?
In meinen Beispielen ich die Kappe auf 3 gesetzt werden, prepend das Element „6“ und zeigen vor/nach Staaten:
{ } -> { "myList": [6] }
{ "myList": [1] } -> { "myList": [6, 1] }
{ "myList": [3, 2, 1] } -> { "myList": [6, 3, 2] }
Aber ich kann nicht einen Mähdrescher verwenden Sie das folgende Update zum Ausdruck SET
und REMOVE
Betrieb auf myList
:
# (":empty" set to an empty list in the value map)
SET myList = list_append(:v, if_not_exists(myList, :empty)) REMOVE myList[3]
der Versuch, diesen Ausdruck führt zu einer Ausnahme zu verwenden (das Dokument API in Java verwenden):
Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths
Es funktioniert, wenn ich die SET
und REMOVE
in zwei verschiedene Update-Anfragen aufgeteilt habe. Gibt es einen Trick, der es mir in einer einzigen Anfrage erlauben würde?
Ja, ich bin nicht überrascht, dass es nicht direkt in einer einzigen Operation durchgeführt werden kann. Ich hatte gehofft, dass es einen Trick oder eine Arbeit geben könnte, die das erreichen würde. (Wenn du zwei separate Anfragen machst, öffnet sich auch die Tür zu den Rennbedingungen, wenn du gleichzeitig Updates machst, obwohl das zum Glück in meinem Anwendungsfall kein Problem ist ...) – ryryguy
Yeah. In den meisten Fällen können Sie Race-Bedingungen durch bedingte Ausdrücke, Wiederholungen und die atomaren Operationen zum Hinzufügen und Subtrahieren verhindern, wenn Sie mit Zahlen arbeiten. –