An operand in the update expression has an incorrect data type
TL;DR — Die Aktion des Updates wird gegen das geprüft, was tatsächlich gespeichert ist (und gegen den Wert, den du geschickt hast), und eines von beiden passt nicht: ADD auf ein Attribut, das weder Zahl noch Set ist, list_append auf etwas, das keine Liste ist, oder ein Set-Operand, dessen Elementtyp nicht zum gespeicherten Set passt. Pass den Operanden an den gespeicherten Typ an — oder repariere das Item, dessen Typ abgedriftet ist.
Was es bedeutet
ValidationException: An operand in the update expression has an incorrect data typeUpdate-Aktionen haben strenge Typregeln: ADD funktioniert nur auf Zahlen und Sets (SS/NS/BS), DELETE nur auf Sets, und list_append nimmt zwei Listen. DynamoDB wertet die Expression zur Schreibzeit gegen die aktuellen Attributtypen des Items aus — sodass derselbe Request bei einem Item gelingen und bei einem anderen scheitern kann, dessen Attribut einen anderen Typ hält. Ein naher Cousin wird früher, zur Expression-Parse-Zeit, zurückgewiesen, wenn der Typ des gesendeten Werts niemals zum Operator passen kann:
ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LISTWarum es passiert
ADD counter :one, abercounterist als String gespeichert — z. B. wurde das Item mit"5"(TypS) statt5(TypN) importiert.ADD tags :tmit einem Listen-(L)-Operanden —ADDsammelt in Sets, nicht Listen. Listen werden mitSET+list_appendangehängt.list_append(mylist, :v), womylisteine Map, ein Set oder ein Skalar ist — beide Argumente müssen Listen sein (wickle ein einzelnes Element als Ein-Element-Liste).- Set-Elementtyp-Konflikt —
ADD/DELETEmit einem String-Set-(SS)-Operanden gegen ein gespeichertes Number-Set (NS) oder umgekehrt. - Typdrift über Items hinweg — gemischte Writer (ein alter Import, ein anderer Dienst) haben dasselbe Attribut bei manchen Items als
Nund bei anderen alsSbelassen, sodass das Update nur manchmal scheitert.
So behebst du es
Zähler: speichere den Wert als Zahl und sende einen Zahlen-Operanden:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringListen: nutze
SETmitlist_appendund wickle das neue Element in eine Liste:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Sets: halte
ADD/DELETE-Operanden vom selben Set-Typ wie das gespeicherte Attribut (SSmitSS,NSmitNS).Korrigiere abgedriftete Items — finde die Items, deren Attribut den falschen Typ trägt, und schreibe sie einmal neu; das Symptom „dasselbe Update scheitert bei manchen Items" ist immer Daten, nicht Code.
Typdrift ist in den meisten Konsolen unsichtbar — DynoTables Item-Editor zeigt den tatsächlich gespeicherten Typ jedes Attributs neben seinem Wert, sodass ein "5"-als-String-Zähler sofort auffällt.
In DynoTable öffnen
DynoTable's item editor shows each attribute's stored type (S, N, L, SS, …) next to its value — a string "5" standing in for a number counter is obvious bevor du run ADD. Open the item with ⌘K and inspect types, then use staging (⌘S) to test the update.
Build the corrected expression in the Expression Builder with explicit type tags. Wechsle Profile mit ⌘P; see Mit AWS verbinden and Installation.
Quellen
- Using update expressions in DynamoDB (verifiziert 2026-07-13)
- Supported data types and naming rules (verifiziert 2026-07-13)
Verwandte Fehler
- Float types are not supported — Zahlen-Typ-Reibung von der SDK-Seite.
- Number overflow
- Typkonflikt: Schlüsselelement passt nicht zum Schema
- Learn: Update-Expressions · Atomare Zähler · Datentypen
Referenzen
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.