Two document paths overlap with each other
TL;DR — Um UpdateExpression só pode tocar cada document path uma vez, e nenhum caminho pode ficar dentro de outro caminho que a mesma expressão também toca. SET profile = :p, profile.email = :e se sobrepõe (profile.email vive dentro de profile); nomear o mesmo atributo duas vezes também. Dobre o filho no valor do pai, ou divida em duas atualizações.
O que significa
ValidationException: 1 validation error detected: Invalid UpdateExpression: Two document paths overlap
with each other; must remove or rewrite one of these paths;
path one: [profile], path two: [profile, email]O DynamoDB avalia toda ação em um UpdateExpression contra os valores de atributo do item como eles estavam antes da atualização — as ações não são aplicadas uma após a outra da esquerda para a direita. Se duas ações miram caminhos sobrepostos (o mesmo atributo, ou um pai e algo aninhado dentro dele), o resultado seria ambíguo: profile.email = :e roda antes ou depois de profile = :p substituir o map inteiro? Em vez de adivinhar, o DynamoDB rejeita a expressão de imediato. (A mesma verificação de sobreposição se aplica a caminhos duplicados em um ProjectionExpression.)
Por que isso acontece
- Definir um pai e seu filho em uma expressão —
SET profile = :p, profile.email = :e. O segundo caminho está dentro do primeiro. - O mesmo atributo aparece duas vezes —
SET updatedAt = :a REMOVE updatedAt, ouSET tags = :t ADD tags :more. - Um ODM/wrapper adiciona silenciosamente um caminho que você também define — o caso clássico: uma biblioteca escreve automaticamente um timestamp ou o objeto inteiro (
SET item = :obj) enquanto seu código também defineitem.field(visto no Dynamoose comcreatedAt/updatedAtautomáticos). - Atualizar uma list e um de seus elementos juntos —
SET mylist = :l, mylist[0] = :v.
Como corrigir
Dobre o filho no valor do pai — se você está substituindo o map de qualquer forma, ponha o novo email dentro dele e remova a segunda ação:
// instead of SET profile = :p, profile.email = :e UpdateExpression: 'SET #p = :p', ExpressionAttributeValues: {':p': {name: 'Ada', email: 'ada@example.com'}}Ou atualize apenas as folhas — mantenha o pai intocado e defina os campos aninhados individualmente (
SET #p.#n = :n, #p.#e = :e). Caminhos irmãos sob o mesmo pai não se sobrepõem; apenas o aninhamento se sobrepõe.De-duplique — certifique-se de que cada atributo aparece em exatamente uma ação entre
SET/REMOVE/ADD/DELETE.Verifique os auto-campos da sua biblioteca — desabilite ou exclua atributos auto-gerenciados (timestamps, versões) das atualizações onde sua própria expressão já os escreve.
Divida em duas requisições quando você genuinamente precisa da semântica "substituir pai, depois ajustar filho" — duas chamadas
UpdateItem, em ordem.
Editar maps aninhados à mão é onde as sobreposições se infiltram — o app desktop DynoTable edita os atributos de um item no lugar e emite uma atualização limpa e sem sobreposição para exatamente o que mudou.
Reproduza
Um único UpdateExpression definindo tanto um map quanto um campo dentro desse mesmo map:
await client.send(
new UpdateItemCommand({
TableName: 'orders',
Key: {pk: {S: 'ORDER#1'}, sk: {S: 'META'}},
UpdateExpression: 'SET #a = :v, #a.#b = :w',
ExpressionAttributeNames: {'#a': 'addr', '#b': 'city'},
ExpressionAttributeValues: {':v': {M: {}}, ':w': {S: 'Berlin'}}
})
);Saída real:
ValidationException: 1 validation error detected: Invalid UpdateExpression: Two document paths overlap with each other; must remove or rewrite one of these paths; path one: [addr], path two: [addr, city]
HTTP 400A mensagem imprime os dois caminhos em conflito por completo, então ela diz exatamente qual par reconciliar. A ordem seria indefinida se ambos fossem aplicados, e é por isso que o DynamoDB recusa em vez de escolher um.
Erros relacionados
- The document path provided is invalid for update — a outra falha de atualização de caminho aninhado (pai ausente em vez de duplamente escrito).
- Invalid UpdateExpression: Syntax error
- Aprenda: Update expressions
Referências
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- Referring to item attributes when using expressions in 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.
Reproduzido em 2026-07-26 no DynamoDB Local 2.x com o AWS SDK for JavaScript v3.1095.0 — a saída acima é literal.