DynamoDB ConditionExpression для проверки списка [0], когда список может не существовать
Я пытаюсь поместить условие в первый элемент списка, когда список может существовать или не существовать. Я пытаюсь проверить, существует ли сначала этот список, но DynamoDB, похоже, не замыкает выражение. Я получаю эту ошибку независимо: ValidationException: предоставленное выражение относится к атрибуту, который не существует в элементе.
params.ExpressionAttributeNames = {
'#checkIns': 'checkIns'
};
params.ExpressionAttributeValues = {
':newCheckIn': [newDateString],
':justDatePart': justDatePart
};
params.UpdateExpression = 'SET #checkIns = list_append(:newCheckIn, #checkIns)';
// make sure task is not already checked in today
params.ConditionExpression =
'attribute_not_exists(#checkIns) OR (NOT begins_with(#checkIns[0], :justDatePart))';
return Table.updateAsync({ID}, params); // using dynogels-promisified
Я не могу получить его к короткому замыканию, проверив, существует ли атрибут первым. Также я попытался использовать if_not_exists(), чтобы заменить checkIns[0] бессмысленной строкой, но я получаю эту ошибку:
ValidationException: Invalid ConditionExpression: функция не разрешена в выражении условия; функция: if_not_exists
У кого-нибудь есть идеи?
1 ответ
Проблема была с UpdateExpression, а не с ConditionExpression.
Следующее обновление устраняет проблему:
params.UpdateExpression = 'SET #checkIns = list_append(:newCheckIn, if_not_exists(#checkIns, :empty_list))';