The document path provided in the update expression is invalid for update

요약 — 중첩 경로(SET parent.child = :v)에 쓰고 있지만 parent가 항목에 존재하지 않거나, map/list 대신 문자열/숫자로 존재합니다. DynamoDB는 중간 map을 자동 생성하지 않습니다. 부모를 먼저 만든 다음(이전 업데이트에서 SET #p = if_not_exists(#p, :emptyMap), 또는 항목 생성 시 {} 초기화) 중첩 속성을 설정하세요.

무엇을 의미하나요

ValidationException: The document path provided in the update expression
is invalid for update

업데이트 표현식은 깊은 경로(stats.daily.views, items[3].qty)를 지정할 수 있지만, 경로의 마지막 을 제외한 모든 단계가 호환되는 타입으로 항목에 이미 존재해야 합니다. 항목에 stats 속성이 없거나 stats가 문자열이면 daily를 걸 곳이 없어 업데이트가 거부됩니다. 같은 검사가 트랜잭션 내부에서도 실행되며, 거기서는 ValidationError 취소 이유로 나타납니다.

왜 발생하나요

  • 부모 map이 아직 존재하지 않음 — 항목이 stats 없이 생성되었고, 이제 SET stats.daily = :v에 내려갈 stats가 없습니다.
  • 부모가 잘못된 타입으로 존재stats가 map(M)이 아니라 문자열이나 숫자여서 지정할 멤버가 없습니다.
  • 존재하지 않는 list로 인덱싱items가 항목에 없거나 list가 아닐 때 SET items[0].qty = :q.
  • 오타가 있는 경로 세그먼트SET stat.daily = :v(s 누락)는 존재하지 않는 속성으로 내려갑니다.
  • 항목마다 형태가 다름 — 업데이트가 map을 지닌 항목에서는 작동하고 그렇지 않은 항목에서는 실패합니다(혼합 엔터티가 있는 단일 테이블 설계에서 흔함).

어떻게 고치나요

  1. 항목을 만들 때 부모 map을 초기화하세요 — 미리 stats: {}(빈 M)를 쓰면 중첩 업데이트가 항상 착지할 곳이 있습니다.

  2. 또는 필요할 때 부모를 만든 다음 자식을 설정하세요 — 두 번의 업데이트. DynamoDB는 이를 한 표현식에서 하도록 허용하지 않습니다(그건 경로 겹침입니다):

    // update 1 — create the map only if it's missing
    UpdateExpression: 'SET #s = if_not_exists(#s, :empty)',
    ExpressionAttributeNames: {'#s': 'stats'},
    ExpressionAttributeValues: {':empty': {}}
    
    // update 2 — now the nested set is safe
    UpdateExpression: 'SET #s.#d = :v',
    ExpressionAttributeNames: {'#s': 'stats', '#d': 'daily'}

    참고로 if_not_exists(stats.daily, :v)는 여기서 도움이 되지 않습니다 — 누락된 부모가 아니라 을 보호합니다.

  3. 전체 형태를 소유한다면 대신 map 전체를 교체하세요: SET #s = :wholeMapstats가 존재했든 아니든 작동합니다.

  4. 실제 항목 형태를 확인하세요 — 항목을 읽고 경로가 유효하다고 가정하기 전에 부모 속성이 존재하며 M/L인지 확인하세요.

DynoTable 데스크톱 앱은 모든 항목의 실제 중첩 구조를 한눈에 보여줍니다 — 쓰기 전에 stats가 map인지, 문자열인지, 아예 없는지 볼 수 있습니다.

관련 오류

References

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

Console 없이 DynamoDB 작업하기

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