这是代码:
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}
我查看了以下链接,但我不明白,我找不到Swift示例。我该如何做到这一点? http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html#Expressions.ExpressionAttributeNames.ReservedWords
我是DynamoDB的新手。
谢谢!
答案 0 :(得分:1)
以下是DynamoDB中所有保留字的列表: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
所以ExpressionAttributeNames
和expressionAttributeValues
是使用#fooattribute
和:foovalue
进行别名的方法,即使foo
是上述列表中的保留字。
因此,在您的情况下,我认为您的错误是因为保留了status
这一术语,您可以尝试将最后一行更改为:
queryExpression.projectionExpression = "#status"
这样你就不会使用保留字,而是会读取别名。该别名将解析为您的实际属性名称,该名称可能也是状态。