An operand in the update expression has an incorrect data type
TL;DR — Die Aktion des Updates wird gegen das typgeprüft, was tatsächlich gespeichert ist (und gegen den gesendeten Wert), und eines davon passt nicht: ADD gegen ein Attribut, das keine Zahl oder kein Set ist, list_append gegen etwas, das keine Liste ist, oder ein Set-Operand, dessen Elementtyp nicht zum gespeicherten Set passt. Bringe den Operanden mit dem gespeicherten Typ in Übereinstimmung — oder korrigiere 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 — die DynoTable-Desktop-App zeigt den tatsächlich gespeicherten Typ jedes Attributs neben seinem Wert, sodass ein "5"-als-String-Zähler sofort auffällt.
Verwandte Fehler
- Float types are not supported — Zahlen-Typ-Reibung von der SDK-Seite.
- Number overflow
- Type mismatch: key element does not match 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.