DynamoDB — The expression can not be empty

TL;DR — Bir ifade parametresini (FilterExpression, KeyConditionExpression, ProjectionExpression, UpdateExpression veya ConditionExpression) boş bir string "" olarak ilettiniz. DynamoDB, ifade parametrelerinin ya geçerli, boş olmayan bir ifade ya da tamamen yok olmasını gerektirir — boş bir string geçersizdir. Parametreyi yalnızca gerçekten bir ifadeniz olduğunda dahil edin; aksi halde anahtarı atlayın.

Ne anlama gelir

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

DynamoDB, boş bir stringi atlanmış bir parametreden farklı ele alır. FilterExpression'ı atlamak "filtre yok" demektir; FilterExpression: "" iletmek "işte bir filtre" demektir — ve sonra ayrıştırılacak hiçbir şey yoktur, dolayısıyla doğrulama başarısız olur. Aynısı her ifade parametresi için geçerlidir.

Neden olur

  • Koşullu oluşturulan params her zaman ayarlanmış — kod her zaman istek nesnesine FilterExpression ekler, sonra hiçbir filtre seçilmediğinde onu "" bırakır.
  • Filtre listesi boş olduğunda anahtarı bırakmak yerine boş bir ifade dizesi yayan bir yardımcı/ORM/bağlayıcı.
  • Hiçbir şey üretmeyen dize birleştirme — boş bir koşul dizisini birleştirmek "" verir.
  • Kırpılmış içerik — yer tutucular çıkarıldı, boş bir ifade bıraktı.

Nasıl düzeltilir

  1. Parametreyi yalnızca boş olmadığında ayarlayın. Params nesnesini koşullu oluşturun: if (filter) params.FilterExpression = filter; — asla "" atamayın.
  2. Çağrıdan önce boş anahtarları silin — değeri boş/boşluk bir dize olan herhangi bir ifade özelliğini istekten çıkarın.
  3. Oluşturucunuzu koruyun — koşul listesi boşsa, ifadeyi hiç eklemeyin.
  4. Bağımsız olduklarını unutmayın — onları kullanan bir ifade yokken ExpressionAttributeNames/Values de atlanmalıdır (hiçbir şeyin başvurmadığı {} değil).
  5. Tam tablo okuması için, FilterExpression olmayan bir Scan doğrudur — boş bir tane iletmek yerine parametreyi atlayın.

Sorguları koda bağlamadan önce mi prototiplendiriyorsunuz? Onları DynoTable masaüstü uygulamasında çalıştırın — yalnızca gerçekten doldurduğunuz ifade parametrelerini gönderir, böylece boş dize bir filtre göndermezsiniz.

DynoTable'da çalıştırın

DynoTable yalnızca gerçekte yapılandırdığınız ifade parametrelerini gönderir; boş bir filtre listesi ""'i iletmek yerine FilterExpression'ı tamamen atlar. ⌘K ile bir tablo açın, sorgu paneline filtreler ekleyin ve en az bir koşul mevcut olduğunda oluşturulan isteği kopyalayın.

Koşullu parametreleri koda bağlamadan önce okumaların prototipini yapmak için Query Builder'yi kullanın. Aşamalandırma (⌘S) güncellemelerdeki boş ifade hatalarını yakalar. Profilleri ⌘P ile değiştirin; Ayarlar → Profiller'deki Bağlantıyı Test Et, hedef tabloyu onaylar. Bkz. Connect to AWS ve Install. Atlanan bir parametre ile boş bir dize farklıdır; yalnızca ikincisi bu hatayı tetikler.

Kaynaklar

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.