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 typeAksi 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: LISTMengapa terjadi
ADD counter :onetetapicounterdisimpan sebagai string — mis. item diimpor dengan"5"(tipeS) alih-alih5(tipeN).ADD tags :tdengan operand list (L) —ADDmengumpulkan ke dalam set, bukan list. List ditambahkan denganSET+list_append.list_append(mylist, :v)di manamylistadalah map, set, atau skalar — kedua argumen harus list (bungkus satu elemen sebagai list satu-item).- Ketidakcocokan tipe elemen set —
ADD/DELETEdengan 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
Npada beberapa item danSpada yang lain, jadi update gagal hanya kadang-kadang.
Cara memperbaikinya
Counter: simpan nilai sebagai number dan kirim operand number:
UpdateExpression: 'ADD #c :one', ExpressionAttributeValues: {':one': 1} // {N: "1"} — not a stringList: gunakan
SETdenganlist_append, dan bungkus elemen baru dalam list:UpdateExpression: 'SET #l = list_append(if_not_exists(#l, :empty), :new)', ExpressionAttributeValues: {':new': ['item'], ':empty': []}Set: jaga operand
ADD/DELETEtipe set yang sama dengan atribut tersimpan (SSdenganSS,NSdenganNS).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
- Float types are not supported — friksi tipe-number dari sisi SDK.
- Number overflow
- Type mismatch: key element does not match schema
- Pelajari: Update expressions · Atomic counters · Data types
References
- Using update expressions in DynamoDB — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- Supported data types and naming rules in Amazon 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.