2017-08-30 80 views
1

這裏是代碼:保留關鍵字 - 斯威夫特3

queryExpression.keyConditionExpression = "#userId= :userId" 
queryExpression.expressionAttributeNames = ["#userId":"userId", "#status":"status"] 
queryExpression.expressionAttributeValues = [":userId":userID, ":status":"accept"] 
queryExpression.projectionExpression = "status" 

,但我得到了下面的錯誤,我不知道,狀態字是DynamoDB的保留字:

Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)" UserInfo={message=Invalid ProjectionExpression: Attribute name is a reserved keyword; reserved keyword: status, __type=com.amazon.coral.validate#ValidationException} 

我有看着下面的鏈接,但我不明白它,我找不到一個斯威夫特的例子。我該如何做到這一點? http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html#Expressions.ExpressionAttributeNames.ReservedWords

我是DynamoDB的新手。

謝謝!

回答

1

這裏是所有的保留字在DynamoDB的列表: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html

所以ExpressionAttributeNamesexpressionAttributeValues是混淆的方式來使用#fooattribute:foovalue即使foo是上述列表中的保留字。

所以你的情況,我相信你的錯誤是因爲長期status被保留,您可以嘗試改變你的最後一行是:

queryExpression.projectionExpression = "#status"

這樣,你不會使用保留字,它會讀取別名。該別名將解析爲您的實際屬性名稱,這可能也是狀態。

+0

請參閱更新後的帖子。感謝您的回覆,MangoBoy。 – Piotr

+0

請爲另外的問題另外發帖。 – MangoBoy

+0

我創建了一個新帖子 - https://stackoverflow.com/q/46132580/5921575。謝謝! – Piotr