The provided expression refers to an attribute that does not exist in the item
TL;DR — UpdateExpression Anda membaca atribut yang tidak ada pada item — operand aritmetika (SET score = score + :inc ketika score tidak pernah diatur), salinan dari atribut lain (SET a = b), atau list_append yang operand list-nya hilang. Jaga baca dengan if_not_exists, atau seed atribut saat item dibuat. (Menulis ke path bersarang yang map parent-nya hilang memunculkan kesalahan "document path invalid for update" yang terpisah.)
Apa artinya
ValidationException: The provided expression refers to an attribute
that does not exist in the itemIni HTTP 400 ValidationException. Permintaan ter-parse dengan baik, tetapi ketika DynamoDB mengevaluasinya terhadap item, sebuah atribut yang dibaca expression Anda — operand dari +/-, sumber dari salinan SET a = b, atau argumen list_append — tidak ada di sana, jadi operand tidak dapat teruraikan. Ini sisi klien dan tidak dapat dicoba ulang: item + expression yang sama mereproduksinya.
Mengapa itu terjadi
- Aritmetika pada atribut yang tidak diatur —
SET score = score + :incmelempar ketikascoretidak pernah diinisialisasi; sintaks increment/decrement dokumen beroperasi pada atribut numerik yang ada. - Menyalin dari atribut yang hilang —
SET backupEmail = emailketika item tidak punyaemail. list_appendpada list yang hilang —SET tags = list_append(tags, :more)ketikatagsbelum ada.- Pemetaan placeholder salah untuk path bersarang — memetakan seluruh path bertitik ke satu entri
ExpressionAttributeNames("#p": "stats.viewCount") alih-alih menggantikan hanya daun; DynamoDB memperlakukan literal"stats.viewCount"sebagai satu nama atribut, yang hilang saat expression membacanya. - Salah ketik atau huruf besar-kecil salah pada nama atribut yang dibaca — nama atribut DynamoDB peka huruf besar-kecil.
Bagaimana cara memperbaikinya
- Jaga baca dengan
if_not_existsagar tulisan pertama berfungsi bahkan ketika atribut belum ada:SET score = if_not_exists(score, :zero) + :inc SET tags = list_append(if_not_exists(tags, :emptyList), :more) - Seed atribut saat item dibuat — tulis
score: 0,tags: []di awal agar baca berikutnya selalu teruraikan. - Gantikan hanya daun dalam path bersarang — jaga titik tetap literal dalam expression:
SET stats.#c = :vdengan{"#c": "viewCount"}, bukan path penuh dalam satu nama. - Verifikasi atribut ada / ejaan + huruf besar-kecil dengan
GetItemsebelum mengasumsikan path valid. - Menulis child bersarang yang parent map-nya hilang? Itu kesalahan saudara — lihat the document path provided in the update expression is invalid for update untuk pola create-parent dua langkah.
Ingin bentuk item yang sebenarnya di depan Anda saat menulis update? Aplikasi desktop DynoTable menunjukkan setiap atribut (termasuk map dan list bersarang) sehingga path parent yang hilang jelas dalam sekejap.
Kesalahan terkait
- The document path provided in the update expression is invalid for update — menulis ke path bersarang yang map/list parent-nya hilang atau tipe salah.
- Invalid UpdateExpression syntax — expression itu sendiri salah bentuk, tertangkap sebelum pemeriksaan ini.
- Reserved keyword in attribute name — nama bertabrakan dengan kata reserved.
- ExpressionAttributeValues tidak valid
- Pelajari: Update expressions · Expression names & values
Referensi
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.