Operan dalam ekspresi pembaruan memiliki tipe data yang salah
TL;DR — Tindakan pembaruan diperiksa jenisnya berdasarkan apa yang sebenarnya disimpan (dan terhadap nilai yang Anda kirim), dan salah satunya tidak cocok: ADD terhadap atribut yang bukan angka atau kumpulan, list_append terhadap sesuatu yang bukan daftar, atau operan kumpulan yang tipe elemennya tidak cocok dengan kumpulan yang disimpan. Cocokkan operan dengan tipe yang disimpan — atau perbaiki item yang tipenya menyimpang.
Apa artinya
ValidationException: An operand in the update expression has an incorrect data typeTindakan pembaruan memiliki aturan tipe yang ketat: ADD hanya bekerja pada angka dan set (SS/NS/BS), DELETE hanya pada set, dan list_append menerima dua daftar. DynamoDB mengevaluasi ekspresi terhadap tipe atribut item saat ini pada waktu penulisan — jadi permintaan yang sama dapat berhasil pada satu item dan gagal pada item lain yang atributnya menyimpan tipe berbeda. Kerabat dekatnya ditolak lebih awal, pada waktu penguraian ekspresi, ketika tipe nilai yang dikirim tidak akan pernah cocok dengan operatornya:
ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LISTMengapa itu terjadi
ADD counter :onetetapicounterdisimpan sebagai string — mis. item diimpor dengan"5"(tipeS) alih-alih5(tipeN).ADD tags :tdengan operan daftar (L) —ADDmengumpulkan ke dalam set, bukan daftar. Daftar ditambahkan denganSET+list_append.list_append(mylist, :v)di manamylistadalah map, set, atau skalar — kedua argumen harus berupa daftar (bungkus satu elemen sebagai daftar berisi satu item).- Tipe elemen set tidak cocok —
ADD/DELETEdengan operan set string (SS) terhadap set angka (NS) yang tersimpan, atau sebaliknya. - Pergeseran tipe antar item — penulis campuran (impor lama, layanan lain) meninggalkan atribut yang sama sebagai
Npada sebagian item danSpada sebagian lainnya, sehingga pembaruan hanya gagal sesekali.
Bagaimana cara memperbaikinya
Penghitung: simpan nilainya sebagai angka dan kirim operan angka:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringDaftar: gunakan
SETdenganlist_append, dan bungkus elemen baru dalam sebuah daftar:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Set: pertahankan operan
ADD/DELETEdengan tipe set yang sama dengan atribut yang tersimpan (SSdenganSS,NSdenganNS).Perbaiki item yang menyimpang — temukan item yang atributnya membawa tipe salah dan tulis ulang sekali; gejala "pembaruan yang sama gagal pada sebagian item" selalu soal data, bukan kode.
Baca item sebelum Anda memperbaruinya.
GetItemsingkat menunjukkan apakahcounterbertipeNatauSpada baris tersebut.
Buka di DynoTable
Editor item DynoTable menampilkan tipe tersimpan setiap atribut (S, N, L, SS, …) di sebelah nilainya — sebuah string "5" yang menggantikan penghitung angka langsung terlihat sebelum Anda menjalankan ADD. Buka item dengan ⌘K dan periksa tipenya, lalu gunakan staging (⌘S) untuk menguji pembaruannya.
Bangun ekspresi yang sudah diperbaiki di Expression Builder dengan tag tipe eksplisit. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.
Sumber
- Menggunakan ekspresi pembaruan di DynamoDB (diverifikasi 13-07-2026)
- Tipe data yang didukung dan aturan penamaan (diverifikasi 13-07-2026)
Kesalahan terkait
- Tipe float tidak didukung — gesekan tipe angka dari sisi SDK.
- Number overflow
- Ketidakcocokan tipe: elemen kunci tidak sesuai skema
- Pelajari: Ekspresi pembaruan · Penghitung atomik · Tipe data
Referensi
- Menggunakan ekspresi pembaruan di DynamoDB — Panduan Pengembang Amazon DynamoDB
- TransactWriteItems — Referensi Amazon DynamoDB API
- Tipe data yang didukung dan aturan penamaan di Amazon DynamoDB — Panduan Pengembang Amazon DynamoDB
- Penanganan kesalahan dengan DynamoDB — Panduan Pengembang Amazon DynamoDB
Terakhir diverifikasi 2026-07-13 berdasarkan dokumentasi resmi AWS yang ditautkan di atas.