Two document paths overlap with each other
TL;DR — Satu UpdateExpression hanya boleh menyentuh tiap document path sekali, dan tidak ada path yang boleh berada di dalam path lain yang juga disentuh expression yang sama. SET profile = :p, profile.email = :e tumpang-tindih (profile.email tinggal di dalam profile); begitu pula menyebut atribut yang sama dua kali. Lipat anaknya ke dalam nilai induknya, atau pecah menjadi dua update.
Apa artinya
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]DynamoDB mengevaluasi setiap aksi dalam UpdateExpression terhadap nilai atribut item sebagaimana adanya sebelum update — aksi tidak diterapkan satu per satu dari kiri ke kanan. Kalau dua aksi menyasar path yang tumpang-tindih (atribut yang sama, atau sebuah induk dan sesuatu yang bersarang di dalamnya), hasilnya akan ambigu: apakah profile.email = :e berjalan sebelum atau sesudah profile = :p mengganti seluruh map? Alih-alih menebak, DynamoDB menolak expression-nya mentah-mentah. (Pemeriksaan tumpang-tindih yang sama berlaku untuk path duplikat di ProjectionExpression.)
Mengapa itu terjadi
- Menyetel induk dan anaknya dalam satu expression —
SET profile = :p, profile.email = :e. Path kedua ada di dalam yang pertama. - Atribut yang sama muncul dua kali —
SET updatedAt = :a REMOVE updatedAt, atauSET tags = :t ADD tags :more. - Sebuah ODM/wrapper diam-diam menambahkan path yang juga Anda setel — kasus klasik: sebuah library otomatis menulis timestamp atau seluruh objek (
SET item = :obj) sementara kode Anda juga menyetelitem.field(terlihat di Dynamoose dengancreatedAt/updatedAtotomatis). - Memperbarui sebuah list dan salah satu elemennya sekaligus —
SET mylist = :l, mylist[0] = :v.
Bagaimana cara memperbaikinya
Lipat anaknya ke dalam nilai induk — kalau toh Anda mengganti seluruh map, taruh email barunya di dalam map itu dan buang aksi keduanya:
// instead of SET profile = :p, profile.email = :e UpdateExpression: 'SET #p = :p', ExpressionAttributeValues: {':p': {name: 'Ada', email: 'ada@example.com'}}Atau perbarui daunnya saja — biarkan induknya tak tersentuh dan setel field bersarangnya satu per satu (
SET #p.#n = :n, #p.#e = :e). Path bersaudara di bawah induk yang sama tidak tumpang-tindih; hanya penyarangan yang bermasalah.Deduplikasi — pastikan setiap atribut muncul tepat di satu aksi di antara
SET/REMOVE/ADD/DELETE.Periksa field otomatis dari library Anda — matikan atau kecualikan atribut yang dikelola otomatis (timestamp, versi) dari update yang expression Anda sendiri sudah menulisnya.
Pecah menjadi dua request ketika Anda memang butuh semantik "ganti induk, lalu ubah anaknya" — dua panggilan
UpdateItem, secara berurutan.
Menyunting map bersarang secara manual adalah tempat tumpang-tindih menyelinap — aplikasi desktop DynoTable menyunting atribut sebuah item di tempatnya dan mengirim update yang bersih dan tidak tumpang-tindih persis untuk apa yang berubah.
Cara mereproduksinya
Satu UpdateExpression yang menyetel sebuah map sekaligus sebuah field di dalam map yang sama:
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'}}
})
);Keluaran sebenarnya:
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 400Pesannya mencetak kedua path yang berkonflik secara lengkap, jadi ia memberi tahu persis pasangan mana yang harus didamaikan. Urutannya tidak terdefinisi kalau keduanya diterapkan, dan itulah alasan DynamoDB menolak ketimbang memilih salah satu.
Kesalahan terkait
- The document path provided is invalid for update — kegagalan update path bersarang lainnya (induknya hilang, bukan ditulis dua kali).
- UpdateExpression tidak valid: kesalahan sintaks
- Pelajari: Update expression
Referensi
- 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
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.
Direproduksi 2026-07-26 terhadap DynamoDB Local 2.x dengan AWS SDK for JavaScript v3.1095.0 — keluaran di atas dikutip apa adanya.