2015-08-04 15 views
6

Amazon'un DynamoDB'sini kullanarak bir taramadan veya sorgudan sonuçların nasıl filtreleneceğini öğreniyorum. Örnek bir filtrenin filter => name = Bob veya benzeri gibi görünmesini beklerim. Ancak, Amazon Basit name = Bob kullanamıyorum neden ifadenin kullanılması daha sonra ExpressionAttributeValues => { ":person": {"S": "Bob"}}DynamoDB neden expressionAttributeValue gerektiriyor?

Bu kafa karıştırıcı ve başımı acıyor, filter => name = :person gibi öznitelik ve gerektirir?


Resmi belgeler: sonuna yakın http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#FilteringResults

Görünüşe çalışma örneği: https://github.com/aws/aws-cli/issues/1073

cevap

9

sözdizimi Bu tip SQL sistemlerinde kullanılan hazırlanmış tablolara benzer bir yaklaşım izlemektedir. Bu, AWS'deki DynamoDB ekibinin yaptığı bir tasarım kararıydı. Bunun nedenlerinden biri, DynamoDB tarafından tanımlanan reserved words (örneğinizde kullandığınız 'ad' dahil) uzun listeyle çakışan alanlara izin vermektir.

Ayrılmış sözcüklerden kaçınmak, ExpressionAttributeNames özniteliği kullanılarak ve öznitelik adlarının belirtilmesiyle gerçekleştirilir. Değer listesinin yer aldığı ExpressionAttributeValues ​​öğesine başvuruyordunuz. Daha fazla bilgi Using Placeholders for Attribute Names and Values dokümantasyon sayfasında mevcuttur.

Bu tasarımın bir başka amacı, daha önce de belirttiğim gibi SQL'de hazırlanan deyimlere benzer şekilde, ifadeyi parametre adlarından ve değerlerden ayırmaktır. Bu ilk bakışta garip görünebilir olsa da, DynamoDB ile etkileşiminiz üzerindeki isteğinizin davranışını etkileyerek kullanıcı girdinizle olası kötü amaçlı veya kasıtsız sorunlardan kaçınarak, NoSQL anlamında girdilerinizi etkili bir şekilde dezenfekte etme yararına sahiptir.

İlgili konular