DynamoDB — The expression can not be empty

TL;DR — Anda meneruskan parameter expression (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression, atau ConditionExpression) sebagai string kosong "". DynamoDB mensyaratkan parameter expression berupa expression tidak-kosong yang valid atau tidak ada sama sekali — string kosong tidak valid. Sertakan parameter hanya ketika Anda benar-benar punya expression; jika tidak, hilangkan kuncinya.

Apa artinya

ValidationException: Invalid FilterExpression: The expression can not be empty;
ValidationException: Invalid KeyConditionExpression: The expression can not be empty;

DynamoDB memperlakukan string kosong berbeda dari parameter yang dihilangkan. Menghilangkan FilterExpression berarti "tidak ada filter"; meneruskan FilterExpression: "" berarti "ini filter" — dan kemudian tidak ada yang di-parse, jadi validasi gagal. Hal yang sama berlaku untuk setiap parameter expression.

Mengapa terjadi

  • Param yang dibangun secara kondisional selalu diatur — kode selalu melampirkan FilterExpression ke objek permintaan, lalu membiarkannya "" ketika tidak ada filter dipilih.
  • Pembantu/ORM/konektor yang mengeluarkan string expression kosong alih-alih menghapus kunci ketika daftar filter kosong.
  • Penggabungan string yang tidak menghasilkan apa pun — menggabungkan array kondisi kosong menghasilkan "".
  • Konten yang dipangkas habis — placeholder dihapus, meninggalkan expression kosong.

Cara memperbaikinya

  1. Atur parameter hanya ketika tidak kosong. Bangun objek params secara kondisional: if (filter) params.FilterExpression = filter; — jangan pernah menetapkan "".
  2. Hapus kunci kosong sebelum panggilan — hapus properti expression apa pun yang nilainya string kosong/spasi dari permintaan.
  3. Jaga builder Anda — jika daftar kondisi kosong, jangan lampirkan expression sama sekali.
  4. Ingat mereka independenExpressionAttributeNames/Values juga harus dihilangkan (bukan {} yang tidak dirujuk apa pun) ketika tidak ada expression yang menggunakannya.
  5. Untuk baca seluruh-tabel, Scan tanpa FilterExpression benar — hilangkan parameter daripada meneruskan yang kosong.

Memprototipe kueri sebelum Anda menghubungkannya ke kode? Jalankan di aplikasi desktop DynoTable — ia hanya mengirim parameter expression yang benar-benar Anda isi, jadi Anda tidak akan mengirim filter string-kosong.

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.