Expected (heredado)
nota
Le recomendamos que utilice los nuevos parámetros de expresión en lugar de estos parámetros heredados siempre que sea posible. Para obtener más información, consulte Uso de expresiones en DynamoDB. Para obtener información específica sobre el nuevo parámetro que reemplaza a este, Use ConditionExpression en su lugar..
El parámetro condicional heredado Expected
es un bloque condicional para una operación UpdateItem
. Expected
es un mapa de pares atributo-condición. Cada entrada del mapa consta de un nombre de atributo, un operador de comparación y uno o varios valores. DynamoDB utiliza el operador de comparación para comparar el atributo con el o los valores suministrados. Para cada entrada de Expected
, el resultado de la evaluación es true o false.
Si especifica más de una entrada en el mapa Expected
, de forma predeterminada todas las condiciones deben evaluarse en true (verdadero). Es decir, las condiciones se combinan con el operador AND
. (Si lo desea, puede usar el parámetro ConditionalOperator
para definir las condiciones en OR (o). En tal caso, deberá evaluarse en true (verdadero) al menos una de las condiciones, en lugar de todas ellas).
Si el mapa Expected
se evalúa en true, entonces la operación condicional se realiza correctamente; de lo contrario, se produce un error.
Expected
contiene lo siguiente:
-
AttributeValueList
: uno o más valores que se evaluarán respecto al atributo suministrado. El número de valores de la lista depende del valor deComparisonOperator
que se utilice.Para el tipo Number, las comparaciones de los valores son numéricas.
Las comparaciones de valores String (cadena) de tipo mayor que, igual que o menor que se basan en Unicode con la codificación UTF-8 binaria. Por ejemplo,
a
es mayor queA
ya
es mayor queB
.Al comparar valores de tipo Binary, DynamoDB trata cada byte de los datos binarios como sin signo.
-
ComparisonOperator
: comparador que permite evaluar los atributos contenidos enAttributeValueList
. Al realizar la comparación, DynamoDB utiliza lecturas de consistencia alta.Están disponibles los siguientes operadores de comparación:
EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN
A continuación se indican las descripciones de cada operador de comparación.
-
EQ
: igual.EQ
se admite para todos los tipos de datos, incluyendo las listas y los mapas.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número), Binary (binario), String Set (conjunto de cadenas), Number Set (conjunto de números) o Binary Set (conjunto de binarios). Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco es igual que{"NS":["6", "2", "1"]}
. -
NE
: distinto.NE
se admite para todos los tipos de datos, incluyendo las listas y los mapas.AttributeValueList
puede contener un soloAttributeValue
de tipo String (cadena), Number (número), Binary (binario), String Set (conjunto de cadenas), Number Set (conjunto de números) o Binary Set (conjunto de binarios). Si un elemento contiene unAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco es igual que{"NS":["6", "2", "1"]}
. -
LE
: menor o igual que.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco se compara con{"NS":["6", "2", "1"]}
. -
LT
: Menor que.AttributeValueList
puede contener un soloAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco se compara con{"NS":["6", "2", "1"]}
. -
GE
: mayor o igual que.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco se compara con{"NS":["6", "2", "1"]}
. -
GT
: Mayor que.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no es igual que{"N":"6"}
.{"N":"6"}
tampoco se compara con{"NS":["6", "2", "1"]}
. -
NOT_NULL
: el atributo existe.NOT_NULL
se admite para todos los tipos de datos, incluyendo las listas y los mapas.nota
Este operador comprueba si existe un atributo, no su tipo de datos. Si el tipo de datos del atributo “
a
” es null y se evalúa medianteNOT_NULL
, el resultado es un valortrue
booleano. Este resultado se debe a que el atributo "a
" existe; su tipo de datos no es pertinente para el operador de comparaciónNOT_NULL
. -
NULL
: el atributo no existe.NULL
se admite para todos los tipos de datos, incluyendo las listas y los mapas.nota
Este operador comprueba la inexistencia de un atributo, no su tipo de datos. Si el tipo de datos del atributo “
a
” es null y se evalúa medianteNULL
, el resultado es un valorfalse
booleano. Esto se debe a que el atributo "a
" existe; su tipo de datos no es pertinente para el operador de comparaciónNULL
. -
CONTAINS
: comprueba si hay una subsecuencia, o un valor en un conjunto.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si el atributo de destino de la comparación es de tipo String (cadena), entonces el operador comprueba si hay una subcadena coincidente. Si el atributo de destino de la comparación es de tipo Binary (binario), entonces el operador busca una subsecuencia del destino que coincida con la entrada. Si el atributo de destino de la comparación es un conjunto ("SS
", "NS
" o "BS
"), entonces el operador se evalúa en true si encuentra una coincidencia exacta con cualquier miembro del conjunto.CONTAINS es compatible con listas: al evaluar "
a CONTAINS b
", "a
" puede ser una lista; sin embargo, "b
" no puede ser un conjunto, un mapa ni una lista. -
NOT_CONTAINS
: comprueba la ausencia de una subsecuencia, o la ausencia de un valor en un conjunto.AttributeValueList
puede contener una sola entradaAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Si el atributo de destino de la comparación es de tipo String (cadena), entonces el operador comprueba la ausencia de una subcadena coincidente. Si el atributo de destino de la comparación es de tipo Binary (binario), entonces el operador busca la ausencia de una subsecuencia del destino que coincida con la entrada. Si el atributo de destino de la comparación es un conjunto ("SS
", "NS
" o "BS
"), entonces el operador se evalúa en true si no (does not
) encuentra una coincidencia exacta con cualquier miembro del conjunto.NOT_CONTAINS es compatible con listas: al evaluar "
a NOT CONTAINS b
", "a
" puede ser una lista; sin embargo, "b
" no puede ser un conjunto, un mapa ni una lista. -
BEGINS_WITH
: comprueba si hay un prefijo.AttributeValueList
puede contener un soloAttributeValue
de tipo String (cadena) o Binary (binario) (no de tipo Number [número] ni Set [conjunto]). El atributo de destino de la comparación debe ser un valor de tipo String o Binary (no de tipo Number ni Set). -
IN
: comprueba si hay entradas que coincidan en dos conjuntos.AttributeValueList
puede contener una o varias entradasAttributeValue
de tipo String (cadena), Number (número) o Binary (binario) (no de tipo Set [conjunto]). Estos atributos se comparan con un atributo existente de tipo Set (conjunto) de un elemento. Si cualquier entrada del conjunto de entrada está presente en el atributo del elemento, la expresión se evalúa en true. -
BETWEEN
: mayor o igual que el primer valor y menor o igual que el segundo valor.AttributeValueList
debe contener dos entradasAttributeValue
del mismo tipo, que puede ser String (cadena), Number (número) o Binary (binario) (pero no de tipo Set [conjunto]). Un atributo de destino coincide si el valor de destino es mayor o igual que la primer entrada y menor o igual que la segunda entrada. Si un elemento contiene una entradaAttributeValue
de un tipo distinto del proporcionado en la solicitud, el valor no coincide. Por ejemplo,{"S":"6"}
no se compara con{"N":"6"}
.{"N":"6"}
tampoco se compara con{"NS":["6", "2", "1"]}
.
-
Los parámetros siguientes se pueden utilizar en lugar de AttributeValueList
y ComparisonOperator
:
-
Value
: valor que DynamoDB compara con un atributo. -
Exists
: valor de tipo Boolean que hace que DynamoDB evalúe el valor antes de intentar la operación condicional.-
Si
Exists
estrue
, DynamoDB verificará si el valor del atributo ya existe en la tabla. Si lo encuentra, la condición se evalúa en true; de lo contrario, la condición se evalúa en false. -
Si
Exists
esfalse
, DynamoDB presupone que el valor del atributonot
(no) existe en la tabla. Si el valor no existe, entonces el supuesto es válido y la condición se evalúa en true (verdadero). Si el valor se encuentra, a pesar del supuesto de que no existía, la condición se evalúa en false.
Tenga en cuenta que el valor predeterminado de
Exists
estrue
. -
Los parámetros Value
y Exists
son incompatibles con AttributeValueList
y ComparisonOperator
. Tenga en cuenta que si utiliza los dos conjuntos de parámetros a la vez, DynamoDB devolverá una excepción ValidationException
.
nota
Este parámetro no es compatible con atributos de tipo List o Map.
Use ConditionExpression en su lugar; ejemplo
Supongamos que desea modificar un elemento de la tabla Music, pero solo si se cumple una condición determinada. Podría usar una solicitud UpdateItem
con un parámetro Expected
como en este ejemplo de la AWS CLI:
aws dynamodb update-item \ --table-name Music \ --key '{ "Artist": {"S":"No One You Know"}, "SongTitle": {"S":"Call Me Today"} }' \ --attribute-updates '{ "Price": { "Action": "PUT", "Value": {"N":"1.98"} } }' \ --expected '{ "Price": { "ComparisonOperator": "LE", "AttributeValueList": [ {"N":"2.00"} ] } }'
Puede utilizar ConditionExpression
en su lugar:
aws dynamodb update-item \ --table-name Music \ --key '{ "Artist": {"S":"No One You Know"}, "SongTitle": {"S":"Call Me Today"} }' \ --update-expression 'SET Price = :p1' \ --condition-expression 'Price <= :p2' \ --expression-attribute-values '{ ":p1": {"N":"1.98"}, ":p2": {"N":"2.00"} }'