DynamoDb删除不存在的项目不会失败,为什么?

时间:2018-04-17 07:12:13

标签: amazon-web-services amazon-dynamodb

我正在使用dynamoDbMapper.delete(object)从dynamodb表中删除一条不存在的记录,该记录使用默认的DynamoDBDeleteExpression

我期待出现某种异常,因为数据库中没有记录,但它什么也没做。它甚至没有返回类型,可以判断删除是成功还是失败。有没有办法添加一个删除表达式或某些东西,如果该项目不在数据库中,我的删除会抛出异常?

3 个答案:

答案 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)

您可以先加载该项目,如果该项目不存在,则可以引发异常,否则将其删除。