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))';
Другие вопросы по тегам