Two document paths overlap with each other
TL;DR — Satu UpdateExpression hanya boleh menyentuh setiap 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 hidup di dalam profile); begitu juga menamai atribut yang sama dua kali. Lipat child ke nilai parent, atau pisahkan menjadi dua update.
Apa artinya
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 mengevaluasi setiap aksi dalam UpdateExpression terhadap nilai atribut item sebagaimana adanya sebelum update — aksi tidak diterapkan satu demi satu dari kiri ke kanan. Jika dua aksi menargetkan path yang tumpang tindih (atribut yang sama, atau parent 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 langsung. (Pemeriksaan tumpang tindih yang sama berlaku untuk path duplikat dalam ProjectionExpression.)
Mengapa terjadi
- Mengatur parent dan child-nya 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. - ODM/pembungkus diam-diam menambahkan path yang juga Anda atur — kasus klasik: library otomatis menulis timestamp atau seluruh objek (
SET item = :obj) sementara kode Anda juga mengaturitem.field(terlihat di Dynamoose dengancreatedAt/updatedAtotomatis). - Memperbarui list dan salah satu elemennya bersama —
SET mylist = :l, mylist[0] = :v.
Cara memperbaikinya
Lipat child ke nilai parent — jika Anda mengganti map bagaimanapun, letakkan email baru di dalamnya dan hapus aksi kedua:
// instead of SET profile = :p, profile.email = :e UpdateExpression: 'SET #p = :p', ExpressionAttributeValues: {':p': {name: 'Ada', email: 'ada@example.com'}}Atau perbarui hanya daun — jaga parent tak tersentuh dan atur field bersarang secara individual (
SET #p.#n = :n, #p.#e = :e). Path saudara di bawah parent yang sama tidak tumpang tindih; hanya penyarangan yang tumpang tindih.Deduplikasi — pastikan setiap atribut muncul dalam tepat satu aksi lintas
SET/REMOVE/ADD/DELETE.Periksa auto-field library Anda — nonaktifkan atau kecualikan atribut yang dikelola otomatis (timestamp, versi) dari update di mana expression Anda sendiri sudah menulisnya.
Pisahkan menjadi dua permintaan ketika Anda benar-benar butuh semantik "ganti parent, lalu ubah child" — dua panggilan
UpdateItem, berurutan.
Mengedit map bersarang secara manual adalah tempat tumpang tindih menyelinap — aplikasi desktop DynoTable mengedit atribut item di tempat dan mengeluarkan update yang bersih dan tidak tumpang tindih untuk persis apa yang berubah.
Kesalahan terkait
- The document path provided is invalid for update — kegagalan update path-bersarang lainnya (parent hilang alih-alih ditulis ganda).
- Invalid UpdateExpression: Syntax error
- Pelajari: Update expressions
References
- 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.