Estoy eliminando un registro que no existe de la tabla dynamodb usando dynamoDbMapper.delete(object) que usa DynamoDBDeleteExpression predeterminado
Esperaba que surgiera algún tipo de excepción ya que el registro no está en la base de datos, pero no hace nada. Ni siquiera tiene un tipo de devolución que pueda indicar si la eliminación fue exitosa o fallida. ¿Hay alguna manera de agregar una expresión de eliminación o algo que haga que mi eliminación arroje una excepción si el elemento no está en la base de datos?
Es por diseño:
A menos que especifique condiciones, DeleteItem es una operación idempotente; ejecutarlo varias veces en el mismo elemento o atributo no da como resultado una respuesta de error.
DE: https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html
Es posible utilizar ReturnValues para determinar si la eliminación hizo algo o no. Si ReturnValues.Attributes está vacío, significa que la eliminación no encontró un registro para eliminar, y puede arrojar un error en este caso. Ejemplo en 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') } }Primero puede cargar el elemento, y si el elemento no existe, puede lanzar una excepción; de lo contrario, eliminarlo.