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.

İlgili hatalar

References

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

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.