An operand in the update expression has an incorrect data type

요약 — 업데이트의 작업은 실제로 저장된 것(그리고 보낸 값)에 대해 타입 검사되며, 그중 하나가 맞지 않습니다: 숫자나 set이 아닌 속성에 대한 ADD, list가 아닌 것에 대한 list_append, 또는 요소 타입이 저장된 set과 일치하지 않는 set 피연산자. 피연산자를 저장된 타입과 일치시키거나 — 타입이 드리프트한 항목을 고치세요.

무엇을 의미하나요

ValidationException: An operand in the update expression has an incorrect data type

업데이트 작업은 엄격한 타입 규칙을 가집니다: ADD숫자set(SS/NS/BS)에서만 작동하고, DELETE는 set에서만, list_append는 두 개의 list를 받습니다. DynamoDB는 쓰기 시점에 항목의 현재 속성 타입에 대해 표현식을 평가합니다 — 그래서 같은 요청이 한 항목에서는 성공하고 속성이 다른 타입을 지닌 다른 항목에서는 실패할 수 있습니다. 가까운 사촌은 보낸 값 의 타입이 연산자에 결코 맞을 수 없을 때 표현식 파싱 시점에 더 일찍 거부됩니다:

ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LIST

왜 발생하나요

  • ADD counter :one인데 counter가 문자열로 저장됨 — 예: 항목이 5(타입 N) 대신 "5"(타입 S)로 가져와짐.
  • list(L) 피연산자가 있는 ADD tags :tADD는 list가 아니라 set 으로 수집합니다. list는 SET + list_append로 추가됩니다.
  • mylist가 map, set, 또는 스칼라인 list_append(mylist, :v) — 두 인수 모두 list여야 합니다(단일 요소를 한 항목 list로 감싸세요).
  • set 요소 타입 불일치 — 저장된 숫자 set(NS)에 대한 문자열 set(SS) 피연산자의 ADD/DELETE, 또는 그 반대.
  • 항목 간 타입 드리프트 — 혼합 작성자(오래된 가져오기, 다른 서비스)가 같은 속성을 일부 항목에서는 N으로, 다른 항목에서는 S로 남겨, 업데이트가 가끔만 실패합니다.

어떻게 고치나요

  1. 카운터: 값을 숫자로 저장하고 숫자 피연산자를 보내세요:

    UpdateExpression: 'ADD #c :one',
    ExpressionAttributeValues: {':one': 1}   // {N: "1"} — not a string
  2. list: list_append와 함께 SET을 사용하고 새 요소를 list로 감싸세요:

    UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)',
    ExpressionAttributeValues: {':new': ['item'], ':empty': []}
  3. set: ADD/DELETE 피연산자를 저장된 속성과 같은 set 타입으로 유지하세요(SSSS와, NSNS와).

  4. 드리프트한 항목을 고치세요 — 속성이 잘못된 타입을 지닌 항목을 찾아 한 번 다시 쓰세요. "같은 업데이트가 일부 항목에서 실패" 증상은 항상 코드가 아니라 데이터입니다.

타입 드리프트는 대부분의 콘솔에서 보이지 않습니다 — DynoTable 데스크톱 앱은 각 속성의 실제 저장된 타입을 값 옆에 표시하므로, 문자열인 "5" 카운터가 즉시 눈에 띕니다.

관련 오류

References

공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.

Console 없이 DynamoDB 작업하기

DynoTable은 DynamoDB를 위한 빠른 데스크톱 클라이언트입니다 — 테이블을 탐색하고, SQL 스타일 쿼리를 실행하고, 항목을 로컬에서 편집하세요.