DynamoDb documentClient.update或delete StringSet抛出ValidationException

时间:2018-01-03 13:59:44

标签: amazon-dynamodb updates amazon-lightsail validationexception

从我在localhost上运行的测试应用程序调用时,我成功更新并删除了dynamoDb表中StringSet的项目。

然后我将应用程序上传到LightSail但现在当我调用相同的函数更新或删除项目时,它会抛出ValidationException!:

{
"message": "Invalid UpdateExpression: Incorrect operand type for operator or 
function; operator: DELETE, operand type: MAP",
"code": "ValidationException",
"time": "2018-01-03T13:20:14.919Z",
"requestId": "9HCQMH5RAUBRK1K7BNESNBUD5BVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 10.381373865940402
}

为什么呢?我没有对我的代码进行任何更改,为什么会发生这种情况以及如何解决?

以下是相关代码:

var documentClient = getDocumentClient();

var paramsSET = {
ExpressionAttributeNames:
{
  "#StringSet": "Packages"
},
ExpressionAttributeValues:
{
  ":value": documentClient.createSet(['filler as SET cannot be empty',
    app.packageName
  ])
},
Key:
{
  "EmailAddress": app.emailAddress
},
ReturnValues: "ALL_NEW",
TableName: "Developers",
UpdateExpression: "ADD #StringSet :value"
  // UpdateExpression: "DELETE #StringSet :value" ------ to delete value
};
  // adds packagename to Packages SET in developers table - creates set if not exist
documentClient.update(paramsSET, function (err, data){}

1 个答案:

答案 0 :(得分:0)

我无法使用documentclient api工作。

最后使用旧的api并使用dynamodb.updateItem让它工作,请参阅docs here

仍然不知道为什么它适用于localhost(访问相同的dynamodb表)而不是在LightSail上运行时。