【问题标题】:DynamoDB ConditionExpression to check list[0] when list may not exist当列表可能不存在时,DynamoDB ConditionExpression 检查列表 [0]
【发布时间】:2017-04-15 00:49:44
【问题描述】:

当列表可能存在也可能不存在时,我正在尝试对列表中的第一项设置条件。我正在尝试首先检查列表是否存在,但 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

有人有什么想法吗?

【问题讨论】:

    标签: node.js amazon-dynamodb dynogels


    【解决方案1】:

    问题出在 UpdateExpression 而不是 ConditionExpression。

    以下更新修复了该问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多