我能够在没有 :status : 接受表达式属性值的情况下获得响应,但是有了它,当我在projectionExpression 行中使用 #status 时,我收到以下错误(状态是 DynamoDB 中的保留字,因此我必须添加主题标签有每https://stackoverflow.com/a/45952329/5921575 https://stackoverflow.com/a/45952329/5921575):
Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)"
UserInfo={__type=com.amazon.coral.validate#ValidationException,
message=Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}}
这是代码:
queryExpression.keyConditionExpression = "#userId= :userId"
queryExpression.expressionAttributeNames = ["#userId":"userId", "#status":"status"]
queryExpression.expressionAttributeValues = [":userId":userID, ":status":"accept"]
queryExpression.projectionExpression = "#status"
我可以不使用 ":status":"accept" 但我不想得到很多没有接受值的项目。我无法在此链接或 stackoverflow 上的任何地方找到答案:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html
Thanks!
有点晚了,但是:您的投影表达式不应该是“#status”,而应该是另一个不是状态的单词。 Status 是保留字,因此不要将其用于投影表达式。请参阅此处,了解有关需要使用保留字时该怎么做的文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html#Expressions.ExpressionAttributeNames.ReservedWords https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html#Expressions.ExpressionAttributeNames.ReservedWords
另一方面,userId 不需要投影表达式,因为它不是保留字。请参阅此处查看保留字列表:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
但是,您不需要投影表达式。您可以简单地使用下面的代码。定义“queryExpression.expressionAttributeNames”以创建状态属性值的替代名称。在这里,我使用短语“statusVal”作为替代。
尝试这个。 (这对我有用)
let queryExpression = AWSDynamoDBQueryExpression()
queryExpression.expressionAttributeNames = ["#statusVal":"status"] // Using statusVal because it is not reserved. You only need statusVal here because it is the only attribute that also happens to be an AWS reserved word.
queryExpression.keyConditionExpression = "userId = :uId AND #statusVal = :sV"
queryExpression.expressionAttributeValues = [
":uId" : String(describing: userId),
":sV" : "accept"]
然后使用AWSDynamoDBObjectMapper执行操作!祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)