Um operando na expressão de atualização possui um tipo de dados incorreto
TL;DR — A ação da atualização é verificada por tipo em relação ao que está realmente armazenado (e em relação ao valor que você enviou), e um deles não se ajusta: ADD em relação a um atributo que não é um número ou conjunto, list_append em relação a algo que não é uma lista ou um operando de conjunto cujo tipo de elemento não corresponde ao conjunto armazenado. Combine o operando com o tipo armazenado - ou corrija o item cujo tipo mudou.
O que significa
ValidationException: An operand in the update expression has an incorrect data typeAs ações de atualização têm regras de tipo rígidas: ADD funciona apenas em números e conjuntos (SS/NS/BS), DELETE apenas em conjuntos e list_append usa duas listas. O DynamoDB avalia a expressão em relação aos tipos de atributos atuais do item no momento da gravação — para que a mesma solicitação possa ter sucesso em um item e falhar em outro cujo atributo contém um tipo diferente. Um primo próximo é rejeitado anteriormente, no momento da análise da expressão, quando o tipo do valor enviado nunca pode caber no operador:
ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LISTPor que isso acontece
ADD counter :one, mascounterestá armazenado como string — por exemplo, o item foi importado com"5"(tipoS) em vez de5(tipoN).ADD tags :tcom um operando de lista (L) — oADDacumula em conjuntos, não em listas. Listas são acrescentadas comSET+list_append.list_append(mylist, :v)ondemylisté um mapa, conjunto ou escalar — os dois argumentos precisam ser listas (envolva um único elemento em uma lista de um item).- Incompatibilidade de tipo de elemento do conjunto —
ADD/DELETEcom um operando de conjunto de strings (SS) contra um conjunto de números (NS) armazenado, ou vice-versa. - Desvio de tipo entre itens — escritores mistos (uma importação antiga, outro serviço) deixaram o mesmo atributo como
Nem alguns itens eSem outros, então a atualização falha só às vezes.
Como corrigir
Contadores: armazene o valor como número e envie um operando numérico:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringListas: use
SETcomlist_appende envolva o novo elemento em uma lista:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Conjuntos: mantenha os operandos de
ADD/DELETEno mesmo tipo de conjunto do atributo armazenado (SScomSS,NScomNS).Conserte itens que desviaram — encontre os itens cujo atributo carrega o tipo errado e reescreva-os uma vez; o sintoma "a mesma atualização falha em alguns itens" é sempre dado, não código.
Leia o item antes de atualizar. Um
GetItemrápido mostra secounteréNouSnaquela linha específica.
Abra no DynoTable
O editor de itens do DynoTable mostra o tipo armazenado de cada atributo (S, N, L, SS, …) ao lado do valor — uma string "5" fazendo as vezes de um contador numérico salta aos olhos antes de você rodar o ADD. Abra o item com ⌘K e inspecione os tipos, depois use o staging (⌘S) para testar a atualização.
Monte a expressão corrigida no Expression Builder com tags de tipo explícitas. Troque de perfil com ⌘P; veja Connect to AWS e Install.
Fontes
- Using update expressions in DynamoDB (verificado em 2026-07-13)
- Supported data types and naming rules (verificado em 2026-07-13)
Erros relacionados
- Float types are not supported — atrito de tipo de número pelo lado do SDK.
- Number overflow
- Incompatibilidade de tipo: o elemento de chave não corresponde ao schema
- Aprenda: Update expressions · Atomic counters · Data types
Referências
- 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
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.