AttributeUpdates(旧式) - Amazon DynamoDB

AttributeUpdates(旧式)

注意

我们建议您尽可能使用新的表达式参数,而不是这些旧式参数。有关更多信息,请参阅 在 DynamoDB 中使用表达式。有关取代此参数的新参数的具体信息,请参阅改用 UpdateExpression。

UpdateItem 操作中,旧式条件参数 AttributeUpdates 包含要修改的属性的名称、要对每个属性执行的操作,以及每个属性的新值。如果要更新的属性是该表上任何索引的索引键属性,则属性类型必须与 AttributesDefinition 表说明中定义的索引键类型匹配。可以使用 UpdateItem 更新任何非键属性。

属性值不能为空。字符串和二进制类型属性的长度必须大于零。集合类型属性不得为空。具有空值的请求将被拒绝,并显示 ValidationException 异常。

每个 AttributeUpdates 元素包含要修改的属性名称以及以下内容:

  • Value - 此属性的新值(如果适用)。

  • Action - 指定如何执行更新的值。此操作仅对数据类型为 Number 或集合的现有属性有效;不要将 ADD 用于其他数据类型。

    如果在表中找到具有指定主键的项目,则以下值执行以下操作:

    • PUT - 将指定的属性添加到项目。如果属性已存在,则将替换为新值。

    • DELETE - 如果没有为 DELETE 指定值,则删除属性及其值。指定值的数据类型必须匹配现有值的数据类型。

      如果指定了一组值,则将从旧集中减去这些值。例如,如果属性值是集合 [a,b,c]DELETE 操作指定 [a,c],则最终属性值为[b]。指定空集是错误。

    • ADD - 如果属性尚不存在,则将指定值添加到项目。如果属性已存在,则 ADD 的行为取决于属性的数据类型:

      • 如果现有属性是数字,并且 Value 也是数字,则将 Value 与现有属性数学相加。如果 Value 为负数,则从现有属性减去该值。

        注意

        如果使用 ADD 为更新前不存在的项目递增或递减数值,则 DynamoDB 使用 0 作为初始值。

        同样,如果使用 ADD 为现有项目递增或递减更新前不存在的属性值,则 DynamoDB 使用 0 作为初始值。例如,假设要更新的项目没有名为 itemcount 的属性,仍决定将数字 3 ADD到该属性。DynamoDB 将创建 itemcount 属性,将初始值设置为 0,最后加上 3。结果将是一个新的 itemcount 属性,值为 3

      • 如果现有数据类型为集合,并且 Value 也是集合,则将 Value 附加到现有集合。例如,如果属性值是集合 [1,2]ADD 操作指定 [3],则最终属性值为 [1,2,3]。如果为集合属性指定 ADD 操作,并且指定的属性类型与现有集类型不匹配,则出错。

        两个集合必须具有相同的基元数据类型。例如,如果现有数据类型是一组字符串,Value 也必须是一组字符串。

    如果在表中找不到具有指定键的项目,则以下值将执行以下操作:

    • PUT - 使 DynamoDB 创建具有指定主键的新项目,然后添加属性。

    • DELETE - 不进行任何操作,因为无法从不存在的项目删除属性。操作成功,但 DynamoDB 不创建新项目。

    • ADD - 使 DynamoDB 创建具有提供的主键和属性值数字(或数字集合)的项目。唯一允许的数据类型是 Number 和 Number Set。

如果提供属于索引键的任何属性,则这些属性的数据类型必须与表属性定义中的架构数据类型匹配。

改用 UpdateExpression – 示例

假设要修改 Music 表中的项目。可以使用 UpdateItem 请求和 AttributeUpdates 参数,如这个 AWS CLI 示例:

aws dynamodb update-item \ --table-name Music \ --key '{ "SongTitle": {"S":"Call Me Today"}, "Artist": {"S":"No One You Know"} }' \ --attribute-updates '{ "Genre": { "Action": "PUT", "Value": {"S":"Rock"} } }'

您可以改用 UpdateExpression

aws dynamodb update-item \ --table-name Music \ --key '{ "SongTitle": {"S":"Call Me Today"}, "Artist": {"S":"No One You Know"} }' \ --update-expression 'SET Genre = :g' \ --expression-attribute-values '{ ":g": {"S":"Rock"} }'

有关更新属性的更多信息,请参阅更新 DynamoDB 表中的项目