Value provided in ExpressionAttributeValues unused in expressions
TL;DR — ExpressionAttributeValues'te hiçbir ifadenin başvurmadığı bir değer yer tutucusu (örneğin :status) sağladınız. DynamoDB, bildirilen her :value'nin bir KeyConditionExpression, FilterExpression, UpdateExpression veya ConditionExpression'da kullanılmasını gerektirir. Yetim değeri kaldırın — ya da onu kullanması gereken ifadeyi düzeltin.
Ne anlama gelir
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}ExpressionAttributeValues, ifadelerinizin karşılaştırdığı literal değerler (:status, :min, …) için ikame map'idir. DynamoDB iki yönlü bir sözleşme uygular: bir ifadede kullanılan her :placeholder bildirilmelidir ve bildirilen her yer tutucu kullanılmalıdır. Hiçbir ifadenin başvurmadığı artakalmış bir değer bu HTTP 400 ValidationException'ı tetikler — istemci tarafında ve map'ler eşleşene kadar yeniden denenebilir değildir.
Neden olur
- İfadeyi düzenledikten sonra bayat bir değer — ifadeden
#s = :status'ı bıraktınız ama:status'ı değerler map'inde bıraktınız. - Kopyala-yapıştır kayması — mevcuttan daha fazla koşula sahip önceki bir istekten bir değerler map'ini yeniden kullanmak.
- Fazla bildirim yapan üretilmiş bir istek — bir oluşturucu, sonradan kaldırılan bir filtre cümlesi için
:vekledi. - Bir ad-değer karışıklığı —
#status(bir ad takma adı) demek istediniz ama:status(bir değer) bildirdiniz. - Bir yazım hatası — ifade
:statkullanırken map:statusbildiriyor.
Nasıl düzeltilir
- Mesajın adını verdiği kullanılmayan değeri
ExpressionAttributeValues'ten silin. - Değerleri ifadeyle eşzamanlı tutun — bir
:placeholder'ı yalnızca bir ifade ona başvurduğunda bildirin. - Adları değerlere karşı doğrulayın —
:yer tutucularıExpressionAttributeValues'e gider;#takma adlarıExpressionAttributeNames'e gider. - İfadeyi ve map'lerini birlikte oluşturun, böylece hiçbir değer sarkmasın.
DynoTable’da sorgula
DynoTable yapılandırdığınız filtre satırlarından ExpressionAttributeValues üretir; çıktıdaki her :placeholder ifade dizesinde referans alınır. ⌘K ile bir tablo açın, sorgu paneline filtreler ekleyin ve artık değerleri ortadan kaldırmak için oluşturulan haritaları SDK çağrınıza kopyalayın.
Başarısız bir istekte hata ayıklarken ifadeyi Expression Builder'ye yapıştırın ve değer haritasını kendi değer haritanızla karşılaştırın. Ayarlar → Profiller'deki profil değiştirme (⌘P) ve Bağlantıyı Test Et, aynı tabloya göre test yaptığınızı doğrular. Bkz. Connect to AWS ve Install.
Kaynaklar
- Using expression attribute values in DynamoDB (2026-07-13 tarihinde doğrulandı)
- DynamoDB condition expression examples (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Value provided in ExpressionAttributeNames unused in expressions —
#nametakma adları için aynı kural. - ExpressionAttributeValues contains invalid value — map'te hatalı biçimlendirilmiş ya da boş bir değer ve ters uyuşmazlık: başvurulan ama hiç sağlanmayan bir
:placeholder. - The provided expression refers to an attribute that does not exist in the item — ifade, orada olmayan bir öğe özniteliğini okuyor.
- Öğrenin: Expression names & values
Kaynaklar
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.