在dynamodb中保留关键字 - Swift 3

时间:2017-08-30 00:00:11

标签: ios swift3 amazon-dynamodb

这是代码:

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的新手。

谢谢!

1 个答案:

答案 0 :(得分:1)

以下是DynamoDB中所有保留字的列表: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html

所以ExpressionAttributeNamesexpressionAttributeValues是使用#fooattribute:foovalue进行别名的方法,即使foo是上述列表中的保留字。

因此,在您的情况下,我认为您的错误是因为保留了status这一术语,您可以尝试将最后一行更改为:

queryExpression.projectionExpression = "#status"

这样你就不会使用保留字,而是会读取别名。该别名将解析为您的实际属性名称,该名称可能也是状态。