当列表可能不存在时,DynamoDB ConditionExpression检查列表[0]

时间:2017-03-05 10:22:28

标签: node.js amazon-dynamodb dynogels

我正在尝试在列表中的第一个项目上添加条件,此列表可能存在也可能不存在。我试图检查列表是否存在,但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:无效的ConditionExpression:条件表达式中不允许该函数;功能:if_not_exists

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题在于UpdateExpression而不是ConditionExpression。

以下更新解决了问题:

sorted_tables