Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

AttributeUpdates

UpdateItem 操作中,AttributeUpdates 为要修改的属性的名称、要对每个属性执行的操作以及每个属性的新值。如果您要更新作为此表上任何索引的索引键属性的属性,则属性类型必须与表描述的 AttributesDefinition 中定义的索引键类型匹配。您可使用 UpdateItem 更新任何非键属性。

属性值不能为 null。String 和 Binary 类型的属性的长度必须大于零。设置类型属性不得为空。将拒绝包含空值的请求,并引发 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 表中的某个项目。您可使用带 AttributeUpdates 参数的 UpdateItem 请求,如此 AWS CLI 示例中所示:

Copy
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

Copy
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"} }'

本页内容: