DynamoDB — can not use both expression and non-expression parameters
TL;DR — İsteğiniz, aynı çağrıda bir eski parametre (KeyConditions, QueryFilter, ScanFilter, AttributesToGet, Expected, AttributeUpdates, ConditionalOperator) ile onun ifade eşdeğerini (KeyConditionExpression, FilterExpression, ProjectionExpression, ConditionExpression, UpdateExpression) ayarladı. DynamoDB, iki aileyi karıştırmayı yasaklar. Eski parametreyi kaldırın ve yalnızca ifadeleri kullanın.
Ne anlama gelir
ValidationException: Can not use both expression and non-expression parameters in
the same request: Non-expression parameters: {KeyConditions} Expression
parameters: {KeyConditionExpression}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: Can not use both expression and non-expression parameters in the same request: Non-expression parameters: {KeyConditions} Expression parameters: {KeyConditionExpression}DynamoDB'nin iki nesil parametresi vardır. Eski aile (KeyConditions, QueryFilter, ScanFilter, AttributesToGet, Expected, AttributeUpdates, ConditionalOperator) ifadelerden öncedir; ifade ailesi (KeyConditionExpression, FilterExpression, ProjectionExpression, ConditionExpression, UpdateExpression) onun yerini aldı. Tek bir istek bir aileye bağlı kalmalıdır — geliştirici kılavuzu, ilgisiz konuları kapsasalar bile DynamoDB'nin "tek bir çağrıda eski koşullu parametreler ile ifade parametrelerinin karıştırılmasına izin vermediğini" açıkça belirtir.
Neden olur
- Yarı taşınmış kod —
KeyConditionExpressioneklediniz ama aynı params nesnesinde eski birKeyConditionsbıraktınız. - Bir projeksiyon çakışması —
ProjectionExpressionile birlikteAttributesToGet(eski). - Bir filtre çakışması —
FilterExpressionile birlikteScanFilter/QueryFilter. - Bir yazma çakışması —
ConditionExpression/UpdateExpressionile birlikteExpected/AttributeUpdates. - Sen ifade biçimini ayarlarken eski bir varsayılan enjekte eden bir yardımcı kitaplık.
Nasıl düzeltilir
- Eski parametreyi silin. Yalnızca ifade biçimini tutun:
KeyConditionsyerineKeyConditionExpression,ScanFilter/QueryFilteryerineFilterExpression,AttributesToGetyerineProjectionExpression,Expected/AttributeUpdatesyerineConditionExpression/UpdateExpression. - Değerleri yer tutuculara taşıyın — eski satır içi değerler
ExpressionAttributeValues(:v) olur ve ayrılmış/karmaşık adlarExpressionAttributeNames(#n) olur. - Tüm params nesnesini denetleyin — çakışma yalnızca aynı konu arasında değil, iki farklı konu arasında da olabilir (örneğin eski projeksiyon + ifade anahtar koşulu).
- Her yerde ifadeleri tercih edin — AWS, eski parametreleri yalnızca geriye dönük uyumluluk için tutar ve tüm yeni kod için ifade parametrelerini önerir; ifadeler üzerinde standartlaşmak bu tür hatalardan kaçınır.
Eski sorgu kodunu modernize mi ediyorsunuz? Önce yalnızca ifade içeren isteğin prototipini DynoTable masaüstü uygulamasında oluşturun, sonra üretilen parametreleri uygulamanıza kopyalayın.
DynoTable'da çalıştırın
DynoTable'ün sorgu paneli yalnızca ifade parametrelerini kullanır; oluşturulan isteklerde eski KeyConditions veya ScanFilter alanları mevcut değildir. ⌘K ile bir tablo açın, bir Sorgu veya Tarama oluşturun ve yayılan KeyConditionExpression ve nitelik haritalarını geçişinize kopyalayın.
Eski SDK kodunu yeniden düzenlemeden önce yalnızca ifade isteğinin prototipini oluşturmak için Query Builder'i kullanın. Aşamalandırma (⌘S), yazma işlemi gerçekleştirmeden yeni sorguyu canlı verilerle test etmenize olanak tanır. Profilleri ⌘P ile değiştirin; bunları Ayarlar → Profiller altında Bağlantıyı Test Et ile yapılandırın. Bkz. Connect to AWS ve Install. Eski KeyConditions ve ScanFilter parametreleri DynoTable tarafından oluşturulan isteklerin hiçbir yerinde görünmüyor. SDK sarmalayıcınız hâlâ bunları enjekte ediyorsa, tüm params nesnesini günlüğe kaydedin ve çağrı 16'ya ulaşmadan önce tüm eski anahtarları silin.
Kaynaklar
- Legacy DynamoDB conditional parameters (2026-07-13 tarihinde doğrulandı)
- Query — Amazon DynamoDB API Reference (2026-07-13 tarihinde doğrulandı)
İlgili hatalar
- Cannot specify projection when Select is COUNT — bir başka karşılıklı dışlayan parametre kombinasyonu.
- Query key condition not supported — hatalı biçimlendirilmiş bir
KeyConditionExpression. - Kod örneği: Query in Node.js — taşınacak yalnızca ifade içeren bir Query.
- Öğrenin: Key condition expressions · Expression names & values
Kaynaklar
- Legacy DynamoDB conditional parameters — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- PutItem — Amazon DynamoDB API Reference
- Using expressions in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.