Two document paths overlap with each other

요약 — 하나의 UpdateExpression은 각 문서 경로를 한 번만 건드릴 수 있고, 어떤 경로도 같은 표현식이 건드리는 다른 경로 안에 있을 수 없습니다. SET profile = :p, profile.email = :e는 겹칩니다(profile.emailprofile 안에 있음). 같은 속성을 두 번 지정하는 것도 마찬가지입니다. 자식을 부모 값에 접거나 두 업데이트로 나누세요.

무엇을 의미하나요

ValidationException: Invalid UpdateExpression: Two document paths overlap
with each other; must remove or rewrite one of these paths;
path one: [profile], path two: [profile, email]

DynamoDB는 UpdateExpression의 모든 작업을 항목의 속성 값 업데이트 이전 그대로 에 대해 평가합니다 — 작업은 왼쪽에서 오른쪽으로 차례로 적용되지 않습니다. 두 작업이 겹치는 경로(같은 속성, 또는 부모와 그 안에 중첩된 것)를 대상으로 하면 결과가 모호해집니다: profile.email = :eprofile = :p가 전체 map을 교체하기 전에 실행되나요 후에 실행되나요? 추측하는 대신 DynamoDB는 표현식을 즉시 거부합니다. (같은 겹침 검사가 ProjectionExpression의 중복 경로에도 적용됩니다.)

왜 발생하나요

  • 한 표현식에서 부모와 그 자식 설정SET profile = :p, profile.email = :e. 두 번째 경로가 첫 번째 안에 있습니다.
  • 같은 속성이 두 번 나타남SET updatedAt = :a REMOVE updatedAt, 또는 SET tags = :t ADD tags :more.
  • ODM/래퍼가 설정하는 경로를 조용히 추가 — 고전적 사례: 코드가 item.field도 설정하는 동안 라이브러리가 타임스탬프나 전체 객체(SET item = :obj)를 자동으로 씀(자동 createdAt/updatedAt이 있는 Dynamoose에서 목격).
  • list와 그 요소 중 하나를 함께 업데이트SET mylist = :l, mylist[0] = :v.

어떻게 고치나요

  1. 자식을 부모 값에 접으세요 — 어차피 map을 교체한다면 새 이메일을 그 안에 넣고 두 번째 작업을 빼세요:

    // instead of SET profile = :p, profile.email = :e
    UpdateExpression: 'SET #p = :p',
    ExpressionAttributeValues: {':p': {name: 'Ada', email: 'ada@example.com'}}
  2. 또는 잎만 업데이트하세요 — 부모를 건드리지 않고 중첩 필드를 개별적으로 설정(SET #p.#n = :n, #p.#e = :e). 같은 부모 아래의 형제 경로는 겹치지 않습니다. 중첩만 겹칩니다.

  3. 중복을 제거하세요 — 각 속성이 SET/REMOVE/ADD/DELETE 전반에서 정확히 하나의 작업에 나타나도록 하세요.

  4. 라이브러리의 자동 필드를 확인하세요 — 자체 표현식이 이미 쓰는 업데이트에서 자동 관리 속성(타임스탬프, 버전)을 비활성화하거나 제외하세요.

  5. 진짜로 "부모 교체 후 자식 조정" 시맨틱이 필요할 때 두 요청으로 나누세요 — 순서대로 두 번의 UpdateItem 호출.

중첩 map을 수동으로 편집하는 것이 겹침이 몰래 들어오는 곳입니다 — DynoTable 데스크톱 앱은 항목의 속성을 제자리에서 편집하고 변경된 것에 대해서만 깔끔하고 겹치지 않는 업데이트를 발행합니다.

관련 오류

References

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

Console 없이 DynamoDB 작업하기

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