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

我试图把条件放在列表中的第一个项目上,当列表可能存在也可能不存在。 我正在尝试检查列表是否首先存在,但是DynamoDB似乎没有将expression式短路。 不pipe:ValidationException:提供的expression式指的是一个在项目中不存在的属性。

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()用一个无意义的stringreplacecheckIns [0],但我得到这个错误:

ValidationException:无效ConditionExpression:条件expression式中不允许使用该函数; 函数:if_not_exists

有人有主意吗?

问题是UpdateExpression而不是ConditionExpression。

以下更新修复了这个问题:

  params.UpdateExpression = 'SET #checkIns = list_append(:newCheckIn, if_not_exists(#checkIns, :empty_list))';