我正在使用dynamoDbMapper.delete(object)
从dynamodb表中删除一条不存在的记录,该记录使用默认的DynamoDBDeleteExpression
我期待出现某种异常,因为数据库中没有记录,但它什么也没做。它甚至没有返回类型,可以判断删除是成功还是失败。有没有办法添加一个删除表达式或某些东西,如果该项目不在数据库中,我的删除会抛出异常?
答案 0 :(得分:10)
这是设计:
除非您指定条件,否则DeleteItem是幂等操作;在同一个项目或属性上多次运行它不会导致错误响应。
FROM:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html
答案 1 :(得分:1)
可以利用ReturnValues来确定delete是否执行了任何操作。如果ReturnValues.Attributes
为空,则表示删除未找到要删除的记录,在这种情况下可能会引发错误。 JavaScript中的示例:
async function deleteWithThrowIfNotExists() {
const dynamo = new AWS.DynamoDB.DocumentClient();
const parameters = {
Key: {
user: 'john'
},
ReturnValues: 'ALL_OLD',
TableName: 'users'
};
const response = await dynamo.delete(parameters).promise();
if (!response.Attributes) {
throw new Error('Cannot delete item that does not exist')
}
}
答案 2 :(得分:0)
您可以先加载该项目,如果该项目不存在,则可以引发异常,否则将其删除。