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 item

Ini 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 diaturSET score = score + :inc melempar ketika score tidak pernah diinisialisasi; sintaks increment/decrement dokumen beroperasi pada atribut numerik yang ada.
  • Menyalin dari atribut yang hilangSET backupEmail = email ketika item tidak punya email.
  • list_append pada list yang hilangSET tags = list_append(tags, :more) ketika tags belum 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

  1. Jaga baca dengan if_not_exists agar 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)
  2. Seed atribut saat item dibuat — tulis score: 0, tags: [] di awal agar baca berikutnya selalu teruraikan.
  3. Gantikan hanya daun dalam path bersarang — jaga titik tetap literal dalam expression: SET stats.#c = :v dengan {"#c": "viewCount"}, bukan path penuh dalam satu nama.
  4. Verifikasi atribut ada / ejaan + huruf besar-kecil dengan GetItem sebelum mengasumsikan path valid.
  5. 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

Referensi

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.