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 type

As 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: LIST

Por que isso acontece

  • ADD counter :one, mas counter está armazenado como string — por exemplo, o item foi importado com "5" (tipo S) em vez de 5 (tipo N).
  • ADD tags :t com um operando de lista (L) — o ADD acumula em conjuntos, não em listas. Listas são acrescentadas com SET + list_append.
  • list_append(mylist, :v) onde mylist é 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 conjuntoADD/DELETE com 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 N em alguns itens e S em outros, então a atualização falha só às vezes.

Como corrigir

  1. Contadores: armazene o valor como número e envie um operando numérico:

    UpdateExpression: 'ADD #c :one',
    ExpressionAttributeValues: {':one': 1}   // {N: "1"} — not a string
  2. Listas: use SET com list_append e envolva o novo elemento em uma lista:

    UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)',
    ExpressionAttributeValues: {':new': ['item'], ':empty': []}
  3. Conjuntos: mantenha os operandos de ADD/DELETE no mesmo tipo de conjunto do atributo armazenado (SS com SS, NS com NS).

  4. 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.

  5. Leia o item antes de atualizar. Um GetItem rápido mostra se counter é N ou S naquela 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

Erros relacionados

Referências

Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.