2

当从在 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){}
4

1 回答 1

0

我无法使用 documentclient api 让它工作。

最后使用了旧的 api 并使用 dynamodb.updateItem 使其工作,请参阅此处的文档

仍然不知道为什么它在 localhost 上工作(访问相同的 dynamodb 表)而不是在 LightSail 上工作时!

于 2018-01-09T12:23:52.517 回答