An operand in the update expression has an incorrect data type

TL;DR — Aksi update diperiksa tipenya terhadap apa yang sebenarnya tersimpan (dan terhadap nilai yang Anda kirim), dan salah satunya tidak cocok: ADD terhadap atribut yang bukan number atau set, list_append terhadap sesuatu yang bukan list, atau operand set yang tipe elemennya tidak cocok dengan set tersimpan. Cocokkan operand dengan tipe tersimpan — atau perbaiki item yang tipenya menyimpang.

Apa artinya

ValidationException: An operand in the update expression has an incorrect data type

Aksi update punya aturan tipe ketat: ADD hanya berfungsi pada number dan set (SS/NS/BS), DELETE hanya pada set, dan list_append mengambil dua list. DynamoDB mengevaluasi expression terhadap tipe atribut item saat ini saat menulis — jadi permintaan yang sama dapat berhasil pada satu item dan gagal pada yang lain yang atributnya menyimpan tipe berbeda. Sepupu dekat ditolak lebih awal, saat parsing expression, ketika tipe nilai yang dikirim tidak pernah bisa cocok dengan operator:

ValidationException: Invalid UpdateExpression: Incorrect operand type for
operator or function; operator: ADD, operand type: LIST

Mengapa terjadi

  • ADD counter :one tetapi counter disimpan sebagai string — mis. item diimpor dengan "5" (tipe S) alih-alih 5 (tipe N).
  • ADD tags :t dengan operand list (L)ADD mengumpulkan ke dalam set, bukan list. List ditambahkan dengan SET + list_append.
  • list_append(mylist, :v) di mana mylist adalah map, set, atau skalar — kedua argumen harus list (bungkus satu elemen sebagai list satu-item).
  • Ketidakcocokan tipe elemen setADD/DELETE dengan operand string set (SS) terhadap number set (NS) tersimpan, atau sebaliknya.
  • Penyimpangan tipe lintas item — penulis campuran (import lama, layanan lain) meninggalkan atribut yang sama sebagai N pada beberapa item dan S pada yang lain, jadi update gagal hanya kadang-kadang.

Cara memperbaikinya

  1. Counter: simpan nilai sebagai number dan kirim operand number:

    UpdateExpression: 'ADD #c :one',
    ExpressionAttributeValues: {':one': 1}   // {N: "1"} — not a string
  2. List: gunakan SET dengan list_append, dan bungkus elemen baru dalam list:

    UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)',
    ExpressionAttributeValues: {':new': ['item'], ':empty': []}
  3. Set: jaga operand ADD/DELETE tipe set yang sama dengan atribut tersimpan (SS dengan SS, NS dengan NS).

  4. Perbaiki item yang menyimpang — temukan item yang atributnya membawa tipe salah dan tulis ulang sekali; gejala "update yang sama gagal pada beberapa item" selalu data, bukan kode.

Penyimpangan tipe tak terlihat di sebagian besar konsol — aplikasi desktop DynoTable menampilkan tipe tersimpan sebenarnya setiap atribut di samping nilainya, jadi counter "5"-sebagai-string langsung menonjol.

Kesalahan terkait

References

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

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.