Ejemplo de la CLI de expresión de condición de DynamoDB
A continuación se muestran algunos ejemplos de uso de expresiones de condición en la AWS Command Line Interface (AWS CLI). Estos ejemplos se basan en la tabla ProductCatalog
, especificada en Referencia a atributos de elementos mediante expresiones en DynamoDB. 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" } }
Temas
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 como una instrucción completa 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 Expresiones, operadores y funciones de condición y filtro en DynamoDB.
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.
Tenga en cuenta el elemento definido anteriormente.
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 Uso de valores de atributos de expresión en DynamoDB.
Para obtener más información sobre IN
, AND
y otras palabras clave, consulte Expresiones, operadores y funciones de condición y filtro en DynamoDB.
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 Uso de expresiones de actualización en DynamoDB.
Supongamos que ha comenzado por el elemento definido anteriormente.
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 Uso de valores de atributos de expresión en DynamoDB.
Para obtener más información sobre ">" y otros operadores, consulte Expresiones, operadores y funciones de condición y filtro en DynamoDB.
Ejemplos de expresiones condicionales
Para obtener más información acerca de las funciones utilizadas en los ejemplos siguientes, consulte Expresiones, operadores y funciones de condición y filtro en DynamoDB. Si desea obtener más información sobre cómo especificar distintos tipos de atributo en una expresión, consulte Referencia a atributos de elementos mediante expresiones en DynamoDB.
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 archivo expression-attribute-values.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 archivo expression-attribute-values.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 archivo expression-attribute-values.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 archivo expression-attribute-values.json.
{ ":v_sub":{"N":"64000"} }