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 type

Tindakan 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: LIST

Mengapa itu 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 operan daftar (L)ADD mengumpulkan ke dalam set, bukan daftar. Daftar ditambahkan dengan SET + list_append.
  • list_append(mylist, :v) di mana mylist adalah map, set, atau skalar — kedua argumen harus berupa daftar (bungkus satu elemen sebagai daftar berisi satu item).
  • Tipe elemen set tidak cocokADD/DELETE dengan 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 N pada sebagian item dan S pada sebagian lainnya, sehingga pembaruan hanya gagal sesekali.

Bagaimana cara memperbaikinya

  1. Penghitung: simpan nilainya sebagai angka dan kirim operan angka:

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

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

  4. 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.

  5. Baca item sebelum Anda memperbaruinya. GetItem singkat menunjukkan apakah counter bertipe N atau S pada 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

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 berdasarkan 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.