从我在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){}
答案 0 :(得分:0)
我无法使用documentclient api工作。
最后使用旧的api并使用dynamodb.updateItem让它工作,请参阅docs here
仍然不知道为什么它适用于localhost(访问相同的dynamodb表)而不是在LightSail上运行时。