DynamoDB — удалить элемент на основе условного выражения по ключу сортировки

#node.js #amazon-dynamodb

#node.js #amazon-dynamodb

Вопрос:

Можно ли удалять записи из dynamodb на основе PrimaryKey и ConditionExpression SortKey?

Следующий пример кода выдает для меня исключение

  DeleteVideoCall = async function (pk, sk) {
    let params = {
        TableName: this._tableName,
        Key: {
            pk: { S: pk.toString() },
            sk: { S: sk.toString() }
        },
        ConditionExpression: "begins_with(sk,:sk)",
        ExpressionAttributeValues: {
            ":sk" : { S: sk.toString()   "_" }
        }
    };

    return this._ddb
        .deleteItem(params)
        .promise()
        .then((data) => {
            console.log(`Video Call '${pk}/${sk}' deleted`);
            return null;
        })
        .catch((error) => {
            console.error(
                `Error deleting video room '${pk}/${sk}' (${error})`
            );
            throw error;
        });
};
  

Я хочу удалить все записи, которые begins_with sk и . Например, если sk равен 560622, удалите все записи, где sk начинается с 560622

с помощью приведенного выше кода я получаю эту ошибку:

Ошибка при удалении видеозала ‘10900/560622’ (исключение ConditionalCheckFailedException: не удалось выполнить условный запрос)

Ответ №1:

Вы не можете этого сделать. Для выполнения удаления вам нужен весь ключ. Что вы можете сделать:

  • элементы запроса (ограничьте полученные свойства вашими PK и SK)
  • используйте пакетную запись для удаления нескольких элементов, она также принимает запросы на удаление