Expresiones de condición - Amazon DynamoDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Expresiones de condición

Para manipular datos en una tabla de Amazon DynamoDB, se usan las operaciones PutItem, UpdateItem y DeleteItem. También puede utilizar BatchWriteItem para realizar varias operaciones PutItem o DeleteItem en una sola llamada.

Para estas operaciones de manipulación de datos, puede especificar una expresión de condición con el fin de determinar qué elementos deben modificarse. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, se produce un error.

Las DeleteItem operaciones PutItemUpdateItem, y tienen un ReturnValues parámetro que puede utilizar para devolver los valores de los atributos tal y como aparecían antes o después de modificarlos. Para obtener más información, consulte ReturnValues.

A continuación se muestran algunos ejemplos AWS Command Line Interface (AWS CLI) del uso de expresiones condicionales. Estos ejemplos se basan en la tabla ProductCatalog, especificada en Especificación de atributos de elementos mediante expresiones. La clave de partición de esta tabla es Id y no tiene clave de ordenación. La siguiente operación PutItem crea un elemento de muestra ProductCatalog al que se refieren los ejemplos.

aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json

Los argumentos de --item se almacenan en el archivo item.json. Para simplificar, se utilizan tan solo algunos de los atributos de elementos.

{ "Id": {"N": "456" }, "ProductCategory": {"S": "Sporting Goods" }, "Price": {"N": "650" } }

PUT condicional

La operación PutItem sobrescribe un elemento que tenga la misma clave principal (si existe). Si desea evitar que esto suceda, utilice una expresión de condición. Esto permite que la escritura se lleve a cabo solo si el elemento en cuestión ya no tiene la misma clave principal.

En el siguiente ejemplo se utiliza attribute_not_exists() para comprobar si la clave principal existe en la tabla antes de intentar la operación de escritura.

nota

Si la clave principal consta de una clave de partición (pk) y una clave de clasificación (sk), el parámetro comprobará si attribute_not_exists(pk) Y attribute_not_exists(sk) se evalúan como verdadero o falso antes de intentar la operación de escritura.

aws dynamodb put-item \ --table-name ProductCatalog \ --item file://item.json \ --condition-expression "attribute_not_exists(Id)"

Si la expresión de condición se evalúa en false (falso), DynamoDB devuelve el siguiente mensaje de error: The conditional request failed (Se produjo un error en la consulta condicional).

nota

Para obtener más información sobre attribute_not_exists y otras funciones, consulte Operador de comparación y referencia de funciones.

Eliminaciones condicionales

Para realizar una eliminación condicional, se usa una operación DeleteItem con una expresión de condición. La expresión de condición debe evaluarse en true para que la operación se lleve a cabo correctamente; de lo contrario, se produce un error.

Considere el elemento de Expresiones de condición.

{ "Id": { "N": "456" }, "Price": { "N": "650" }, "ProductCategory": { "S": "Sporting Goods" } }

Suponga que desea eliminar el elemento, pero solo en las siguientes condiciones:

  • El valor de ProductCategory es "Sporting Goods" o "Gardening Supplies".

  • El valor de Price está comprendido entre 500 y 600.

En el siguiente ejemplo se intenta eliminar el elemento.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id":{"N":"456"}}' \ --condition-expression "(ProductCategory IN (:cat1, :cat2)) and (Price between :lo and :hi)" \ --expression-attribute-values file://values.json

Los argumentos de --expression-attribute-values se almacenan en el archivo values.json.

{ ":cat1": {"S": "Sporting Goods"}, ":cat2": {"S": "Gardening Supplies"}, ":lo": {"N": "500"}, ":hi": {"N": "600"} }
nota

En la expresión de condición, : (signo de dos puntos) indica un valor de atributo de expresión (un marcador de posición del valor real). Para obtener más información, consulte Valores de los atributos de expresión.

Para obtener más información sobre IN, AND y otras palabras clave, consulte Operador de comparación y referencia de funciones.

En este ejemplo, la comparación de ProductCategory se evalúa en true, pero la comparación de Price se evalúa en false. Esto hace que la expresión de condición se evalúe en false y, por consiguiente, la operación DeleteItem no se lleva a cabo.

Actualizaciones condicionales

Para realizar una actualización condicional, se usa una operación UpdateItem con una expresión de condición. La expresión de condición debe evaluarse en true para que la operación se lleve a cabo correctamente; de lo contrario, se produce un error.

nota

UpdateItem también admite las expresiones de actualización, donde especifica las modificaciones que se desea aplicar a un elemento. Para obtener más información, consulte Expresiones de actualización.

Supongamos que ha comenzado por el elemento mostrado en Expresiones de condición.

{ "Id": { "N": "456"}, "Price": {"N": "650"}, "ProductCategory": {"S": "Sporting Goods"} }

En el ejemplo siguiente se realiza una operación UpdateItem. Se intenta reducir el valor de Price de un producto en 75, pero la expresión de condición impide la actualización si el valor de Price actual es menor o igual que 500.

aws dynamodb update-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --update-expression "SET Price = Price - :discount" \ --condition-expression "Price > :limit" \ --expression-attribute-values file://values.json

Los argumentos de --expression-attribute-values se almacenan en el archivo values.json.

{ ":discount": { "N": "75"}, ":limit": {"N": "500"} }

Si el valor inicial de Price es 650, la operación UpdateItem reduce el Price a 575. Si ejecuta la operación UpdateItem de nuevo, el valor de Price se reduce a 500. Si se ejecuta una tercera vez, la expresión de condición se evalúa en false y la actualización no se lleva a cabo.

nota

En la expresión de condición, : (signo de dos puntos) indica un valor de atributo de expresión (un marcador de posición del valor real). Para obtener más información, consulte Valores de los atributos de expresión.

Para obtener más información sobre ">" y otros operadores, consulte Operador de comparación y referencia de funciones.

Ejemplos de expresiones condicionales

Para obtener más información acerca de las funciones utilizadas en los ejemplos siguientes, consulte Operador de comparación y referencia de funciones. Si desea obtener más información sobre cómo especificar distintos tipos de atributo en una expresión, consulte Especificación de atributos de elementos mediante expresiones.

Comprobación de los atributos de un elemento

Puede comprobar la existencia (o inexistencia) de cualquier atributo. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, produce un error.

En el siguiente ejemplo se utiliza attribute_not_exists para eliminar un producto únicamente si no tiene el atributo Price.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_not_exists(Price)"

DynamoDB también proporciona un función attribute_exists. En el siguiente ejemplo se elimina un producto únicamente si ha recibido opiniones negativas.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_exists(ProductReviews.OneStar)"

Comprobación del tipo de atributo

Puede comprobar el tipo de datos de un valor de atributo mediante la función attribute_type. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, produce un error.

En el ejemplo siguiente se utiliza attribute_type para eliminar un producto sólo si tiene un atributo Color de tipo String Set.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "attribute_type(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

Los argumentos de --expression-attribute-values se almacenan en el expression-attribute-values archivo.json.

{ ":v_sub":{"S":"SS"} }

Comprobación del valor inicial de cadena

Puede comprobar si un valor de atributo String comienza con una subcadena determinada mediante la función begins_with. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, produce un error.

En el ejemplo siguiente se utiliza begins_with para eliminar un producto solo si el elemento FrontView del mapa Pictures comienza con un valor específico.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "begins_with(Pictures.FrontView, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

Los argumentos de --expression-attribute-values se almacenan en el expression-attribute-values archivo .json.

{ ":v_sub":{"S":"http://"} }

Comprobación de un elemento en un conjunto

Puede buscar un elemento en un conjunto o buscar una subcadena dentro de una cadena mediante el uso de la función contains. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, produce un error.

En el ejemplo siguiente se utiliza contains para eliminar un producto sólo si el conjunto de cadenas Color tiene un elemento con un valor específico.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "contains(Color, :v_sub)" \ --expression-attribute-values file://expression-attribute-values.json

Los argumentos de --expression-attribute-values se almacenan en el expression-attribute-values archivo .json.

{ ":v_sub":{"S":"Red"} }

Comprobación del tamaño de un valor de atributo

Puede comprobar el tamaño de un valor de atributo mediante la función size. Si la expresión de condición se evalúa en true, entonces la operación se realiza correctamente; de lo contrario, produce un error.

En el ejemplo siguiente se utiliza size para eliminar un producto sólo si el tamaño del atributo Binary VideoClip es mayor de 64000 bytes.

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{"Id": {"N": "456"}}' \ --condition-expression "size(VideoClip) > :v_sub" \ --expression-attribute-values file://expression-attribute-values.json

Los argumentos de --expression-attribute-values se almacenan en el expression-attribute-values archivo .json.

{ ":v_sub":{"N":"64000"} }