UpdateItem
重要
本节介绍已经弃用的 API 版本 2011-12-05,不应用于新应用程序。
有关当前低级别 API 的文档,请参阅 Amazon DynamoDB API 参考。
描述
编辑现有项目的属性。您可以执行条件更新(如果不存在,则插入新的属性名称-值对;如果现有名称-值对具有某些预期属性值,则替换它)。
注意
无法使用 UpdateItem 更新主键属性。而应删除项目,使用 PutItem 创建具有新属性的新项目。
UpdateItem 操作包括 Action
参数,定义如何执行更新。您可以放入、删除或添加属性值。
属性值不能为空;字符串和二进制类型属性的长度必须大于零;集合类型属性不能为空。具有空值的请求将被拒绝,并显示 ValidationException
。
如果现有项目具有指定的主键:
PUT— 添加指定的属性。如果属性存在,则将替换为新值。
DDELETE — 如果未指定值,则删除属性及其值。如果指定了一组值,则将从旧集中删除指定集中的值。因此,如果属性值包含 [a,b,c] 并且删除操作包含 [a,c],则最终属性值为 [b]。指定值的类型必须与现有值类型匹配。指定空集无效。
ADD — 仅对数字或者目标属性是集合(包括字符串集)时,使用 add 操作。如果目标属性是单个字符串值或标量二进制值,ADD 将不起作用。指定的值将添加到数值中(递增或递减现有数值),或作为字符串集中的附加值添加。如果指定一组值,则这些值将添加到现有集合。例如,如果原始集合是 [1,2],提供的值为 [3],则在 add 操作后,集合为 [1,2,3],而不是 [4,5]。如果为集合属性指定 Add 操作,并且指定的属性类型与现有集合类型不匹配,则会出错。
如果对不存在的属性使用 ADD,则将该属性及其值添加到项目。
如果没有项目匹配指定的主键:
PUT— 使用指定主键创建新项目。然后添加指定属性。
DELETE— 什么都不会发生。
ADD— 为属性值创建一个具有提供的主键和数字(或一组数字)的项目。对字符串或二进制类型无效。
注意
如果使用 ADD
为更新前不存在的项目递增或递减数值,则 DynamoDB 使用 0
作为初始值。如果使用 ADD
为更新前不存在的属性递增或递减数值(但项目存在),则 DynamoDB 使用 0
作为初始值。例如,可以使用 ADD
将 +3
添加到更新之前不存在的属性。DynamoDB 对初始值使用 0
,更新后的值为 3
。
有关使用此操作的更多信息,请参阅 使用 DynamoDB 中的项目和属性。
请求
语法
// This header is abbreviated. // For a sample of a complete header, see DynamoDB 低级 API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.UpdateItem content-type: application/x-amz-json-1.0 {"TableName":"Table1", "Key": {"HashKeyElement":{"S":"AttributeValue1"}, "RangeKeyElement":{"N":"AttributeValue2"}}, "AttributeUpdates":{"AttributeName3":{"Value":{"S":"AttributeValue3_New"},"Action":"PUT"}}, "Expected":{"AttributeName3":{"Value":{"S":"AttributeValue3_Current"}}}, "ReturnValues":"ReturnValuesConstant" }
名称 | 描述 | 必填 |
---|---|---|
TableName
|
包含要更新项目的表的名称。 类型:字符串 |
是 |
Key
|
定义项目的主键。有关主键的更多信息,请参阅 主键。 类型: |
是 |
AttributeUpdates |
属性名称到新值和更新操作的映射。属性名称指定要修改的属性,不能包含任何主键属性。 类型:属性名称、值和属性更新操作的映射。 |
|
AttributeUpdates :Action |
指定如何执行更新。可能的值: 类型:字符串 默认: |
否 |
Expected
|
指定条件更新的属性。 类型:属性名称映射。 |
否 |
Expected:AttributeName
|
条件放入的属性的名称。 类型:字符串 |
否 |
Expected:AttributeName: ExpectedAttributeValue |
使用此参数指定属性名称-值对是否已经存在值。 如果项目不存在 "Color" 属性,则下面的 JSON 表示将更新该项目:
下面的 JSON 表示在更新项目前,检查 "Color" 名称的属性是否已有 "Yellow" 值:
默认情况下,如果使用
注意如果指定的 |
否 |
ReturnValues
|
如果要在用 类型:字符串 |
否 |
响应
语法
下面的语法示例假定请求指定 ALL_OLD
的 ReturnValues
参数;否则,响应只有 ConsumedCapacityUnits
元素。
HTTP/1.1 200 x-amzn-RequestId: 8966d095-71e9-11e0-a498-71d736f27375 content-type: application/x-amz-json-1.0 content-length: 140 {"Attributes":{ "AttributeName1":{"S":"AttributeValue1"}, "AttributeName2":{"S":"AttributeValue2"}, "AttributeName3":{"S":"AttributeValue3"}, "AttributeName5":{"B":"dmFsdWU="} }, "ConsumedCapacityUnits":1 }
名称 | 描述 |
---|---|
Attributes
|
属性名称-值对的映射,但仅当 类型:属性名称-值对映射。 |
ConsumedCapacityUnits |
操作消耗的写入容量单位数。此值显示应用于预置吞吐量的数字。有关更多信息,请参阅DynamoDB 预置容量模式。 类型:数字 |
特殊错误
错误 | 描述 |
---|---|
ConditionalCheckFailedException
|
条件检查失败。属性(“+ 名称 +”)值是(“+ 值 +”),但是预期值(“+ expValue +”) |
ResourceNotFoundExceptions
|
找不到指定项目或属性。 |
示例
有关使用 AWS SDK 的示例,请参阅 使用 DynamoDB 中的项目和属性。
示例请求
// This header is abbreviated. For a sample of a complete header, see DynamoDB 低级 API. POST / HTTP/1.1 x-amz-target: DynamoDB_20111205.UpdateItem content-type: application/x-amz-json-1.0 {"TableName":"comp5", "Key": {"HashKeyElement":{"S":"Julie"},"RangeKeyElement":{"N":"1307654350"}}, "AttributeUpdates": {"status":{"Value":{"S":"online"}, "Action":"PUT"}}, "Expected":{"status":{"Value":{"S":"offline"}}}, "ReturnValues":"ALL_NEW" }
示例响应
HTTP/1.1 200 OK x-amzn-RequestId: 5IMHO7F01Q9P7Q6QMKMMI3R3QRVV4KQNSO5AEMVJF66Q9ASUAAJG content-type: application/x-amz-json-1.0 content-length: 121 Date: Fri, 26 Aug 2011 21:05:00 GMT {"Attributes": {"friends":{"SS":["Lynda, Aaron"]}, "status":{"S":"online"}, "time":{"N":"1307654350"}, "user":{"S":"Julie"}}, "ConsumedCapacityUnits":1 }