2017-08-30 81 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