UpdateItem
importante
Esta sección se refiere a la versión 2011-12-05 del API, que está obsoleta y no debe utilizarse para nuevas aplicaciones.
Para consultar la documentación sobre la API de bajo nivel actual, consulte la Referencia de la API de Amazon DynamoDB.
Descripción
Edita los atributos de un elemento existente. Puede realizar una actualización condicional, es decir, insertar un nuevo par nombre-valor de atributo si no existe, o bien sustituir un par de nombre-valor si tiene determinados valores de atributo esperados.
nota
Los atributos de clave principal no se pueden actualizar mediante UpdateItem. En lugar de ello, debe eliminar el elemento y utilizar PutItem para crear otro con los nuevos atributos.
La operación UpdateItem incluye un parámetro Action
, que define cómo realizar la actualización. Puede poner, eliminar o agregar valores de atributos.
Los valores de los atributos no pueden ser null; los atributos de tipo cadena y binario deben tener una longitud superior a cero; y los atributos de tipo conjunto no pueden estar vacíos. Las solicitudes con valores vacíos se rechazan con la excepción ValidationException
.
Si un elemento tiene la clave principal especificada:
PUT: agrega el atributo especificado. Si el atributo existe, se sustituye por el nuevo valor.
DELETE: si no se especifica ningún valor, esta acción elimina el atributo y su valor. Si se especifica un conjunto de valores, entonces los valores del conjunto especificado se eliminan del conjunto anterior. Por lo tanto, si el valor del atributo contiene [a,b,c] y la acción de eliminación contiene [a,c], el valor del atributo final es [b]. El tipo del valor especificado debe coincidir con el tipo de valor existente. No es válido especificar un conjunto vacío.
ADD: la acción de añadir se utiliza sólo para números o si el atributo de destino es un conjunto (incluidos los conjuntos de cadena). ADD no funciona si el atributo de destino es un valor de cadena única o un valor escalar de tipo Binary (binario). El valor especificado se suma a un valor numérico (se suma o se resta al valor numérico existente) o se agrega como valor adicional a un conjunto de cadenas. Si se especifica un conjunto de valores, los valores se agregan al conjunto existente. Por ejemplo, si el conjunto original es [1,2] y el valor suministrado es [3], después de la operación de añadir el conjunto será [1,2,3] y no [4,5]. Se produce un error si se especifica una acción Add para un atributo de tipo Set y el tipo de atributo especificado no coincide con el tipo de conjunto existente.
Si utiliza ADD para un atributo que no existe, el atributo y sus valores se agregan al elemento.
Si no hay ningún elemento que coincida con la clave principal especificada:
PUT: crea un elemento nuevo con la clave principal especificada. A continuación, agrega el atributo especificado.
DELETE: no sucede nada.
ADD: crea un elemento con la clave principal y el número (o el conjunto de números) suministrados para el valor del atributo. No es válido para los tipos de cadena o binario.
nota
Si utiliza ADD
para sumar o restar de un valor numérico de un elemento que no existía antes de la actualización, DynamoDB utilizará 0
como valor inicial. Además, si actualiza un elemento mediante ADD
para sumar o restar de un valor numérico de un atributo que no existía antes de la actualización (pero el elemento sí existía), DynamoDB utilizará 0
como valor inicial. Por ejemplo, si utiliza ADD
para sumar +3
a un atributo que no existía antes de la actualización. DynamoDB utilizará 0
para el valor inicial y el valor posterior a la actualización será 3
.
Para obtener más información sobre cómo usar esta operación, consulte Uso de elementos y atributos en DynamoDB.
Solicitudes
Sintaxis
// This header is abbreviated. // For a sample of a complete header, see API de bajo nivel de DynamoDB. 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" }
Nombre | Descripción | Obligatorio |
---|---|---|
TableName
|
Nombre de la tabla que contiene el elemento que se va a actualizar. Tipo: cadena |
Sí |
Key
|
Clave principal que define el elemento. Para obtener más información sobre claves principales, consulte Clave principal. Tipo: Map, mapa de |
Sí |
AttributeUpdates |
Mapa del nombre de atributo al nuevo valor y acción de la actualización. Los nombres de los atributos especifican los atributos que hay que modificar y no pueden contener atributos de clave principal. Tipo: Map, mapa de nombre de atributo, valor y acción de la actualización del atributo. |
|
AttributeUpdates :Action |
Especifica cómo realizar la actualización. Valores posibles: Tipo: cadena Valor predeterminado: |
No |
Expected
|
Designa un atributo para una actualización condicional. El parámetro Tipo: Map, mapa de nombres de atributos. |
No |
Expected:AttributeName
|
Nombre del atributo para la operación Put condicional. Tipo: cadena |
No |
Expected:AttributeName: ExpectedAttributeValue |
Use este parámetro para especificar si ya existe un valor del par de nombre-valor del atributo. En la siguiente notación JSON, se actualiza el elemento si todavía no existe el atributo "Color" para ese elemento:
En la siguiente notación JSON se comprueba si el atributo denominado "Color" tiene el valor "Yellow" antes de actualizar el elemento:
De forma predeterminada, si utiliza el parámetro
notaSi especifica |
No |
ReturnValues
|
Use este parámetro si desea obtener los pares de nombre-valor de los atributos antes de actualizarlos mediante la solicitud Tipo: cadena |
No |
Respuestas
Sintaxis
En el ejemplo de sintaxis siguiente se supone que la solicitud ha especificado un parámetro ReturnValues
de ALL_OLD
; en caso contrario, la respuesta solo contiene la entrada 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 }
Nombre | Descripción |
---|---|
Attributes
|
Mapa de pares de nombre-valor del atributo, pero solo si el parámetro Tipo: Map, mapa de pares de nombre-valor del atributo. |
ConsumedCapacityUnits |
Cantidad de unidades de capacidad de escritura consumidas por la operación. Este valor muestra el número aplicado al rendimiento aprovisionado. Para obtener más información, consulte Modo de capacidad aprovisionada de DynamoDB. Tipo: Number |
Errores especiales
Error | Descripción |
---|---|
ConditionalCheckFailedException
|
Error en la verificación condicional. El valor del atributo ("+ name +") es ("+ value +") pero se esperaba ("+ expValue +"). |
ResourceNotFoundExceptions
|
No se encontró el elemento o atributo especificado. |
Ejemplos
Para obtener ejemplos sobre cómo usar el SDK de AWS, consulte Uso de elementos y atributos en DynamoDB.
Solicitud de ejemplo
// This header is abbreviated. For a sample of a complete header, see API de bajo nivel de DynamoDB. 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" }
Respuesta de ejemplo
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 }