Expected (herdado)
nota
Sugerimos que você use os novos parâmetros de expressão, em vez desses parâmetros herdados. Para ter mais informações, consulte Usar expressões no DynamoDB. Para obter informações específicas sobre o novo parâmetro que substitui este, Use ConditionExpression em vez disso..
O parâmetro condicional herdado Expected é um bloco condicional para uma operação UpdateItem. Expected é um mapa de pares de atributo/condição. Cada elemento do mapa consiste em um nome de atributo, um operador de comparação e um ou mais valores. O DynamoDB compara o atributo com os valores que você forneceu usando o operador de comparação. Para cada elemento Expected, o resultado da avaliação é verdadeiro ou falso.
Se você especificar mais de um elemento no mapa Expected, por padrão, todas as condições deverão ser avaliadas como verdadeiras. Em outras palavras, as condições são combinadas usando o operador AND. (Em vez disso, você pode usar o parâmetro ConditionalOperator processar as condições com o operador OR. Se fizer isso, pelo menos uma das condições deverá ser avaliada como true, em vez de todas elas.)
Se o mapa Expected for avaliado como verdadeiro, a operação condicional será bem-sucedida; caso contrário, há uma falha.
Expected contém o seguinte:
-
AttributeValueList: um ou mais valores para avaliar em relação ao atributo fornecido. O número de valores na lista depende doComparisonOperatorque está sendo usado.Para o tipo Number, as comparações de valor são numéricas.
As comparações de valor String para "maior que", "igual a" ou "menor que" são baseadas em Unicode com codificação UTF-8 binária. Por exemplo,
aé maior queA, eaé maior queB.Para o tipo Binary, o DynamoDB trata cada byte de dados binários como não assinados ao comparar valores binários.
-
ComparisonOperator: um comparador para avaliar atributos naAttributeValueList. Ao executar a comparação, o DynamoDB usa leituras fortemente consistentes.Os seguintes operadores de comparação estão disponíveis:
EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEENVeja a seguir as descrições de cada operador de comparação.
-
EQ: igual.EQé aceito por todos os tipos de dados, incluindo listas e mapas.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não é igual a{"NS":["6", "2", "1"]}. -
NE: não é igual.NEé aceito por todos os tipos de dados, incluindo listas e mapas.AttributeValueListpode conter apenas umAttributeValuedo tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém umAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não é igual a{"NS":["6", "2", "1"]}. -
LE: Menor ou igual a.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não se compara a{"NS":["6", "2", "1"]}. -
LT: Menor que.AttributeValueListpode conter apenas umAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não se compara a{"NS":["6", "2", "1"]}. -
GE: Maior ou igual a.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não se compara a{"NS":["6", "2", "1"]}. -
GT: Maior que.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não é igual a{"N":"6"}. Além disso,{"N":"6"}não se compara a{"NS":["6", "2", "1"]}. -
NOT_NULL: o atributo existe.NOT_NULLé aceito por todos os tipos de dados, incluindo listas e mapas.nota
Este operador testa a existência de um atributo, não o tipo de dados. Se o tipo de dados do atributo "
a" for nulo e você avaliá-lo usandoNOT_NULL, o resultado será um Booleantrue. Isso acontece porque o atributo "a" existe; o tipo de dados não é relevante para o operador de comparaçãoNOT_NULL. -
NULL: o atributo não existe.NULLé aceito por todos os tipos de dados, incluindo listas e mapas.nota
Este operador testa a não existência de um atributo, e não seu tipo de dados. Se o tipo de dados do atributo "
a" for nulo e você avaliá-lo usandoNULL, o resultado será um Booleanfalse. Isso acontece porque o atributo "a" existe; o tipo de dados não é relevante para o operador de comparaçãoNULL. -
CONTAINS: verifica uma subsequência ou valor em um conjunto.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se o atributo de destino da comparação for do tipo String, o operador procurará uma substring correspondente. Se o atributo de destino da comparação for do tipo Binary, o operador procurará uma subsequência do destino que corresponda à entrada. Se o atributo de destino da comparação for um conjunto ("SS", "NS" ou "BS"), o operador será avaliado como verdadeiro, se ele encontrar uma correspondência exata com qualquer membro do conjunto.CONTAINS tem suporte em listas: ao avaliar "
a CONTAINS b", "a" pode ser uma lista. No entanto, "b" não pode ser um conjunto, um mapa ou uma lista. -
NOT_CONTAINS: verifica a ausência de uma subsequência ou a ausência de um valor em um conjunto.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Se o atributo de destino da comparação for String, o operador verificará a ausência de uma substring correspondente. Se o atributo de destino da comparação for Binary, o operador verificará a ausência de uma subsequência do destino que corresponda à entrada. Se o atributo de destino da comparação for um conjunto ("SS", "NS" ou "BS"), o operador será avaliado como verdadeiro se eledoes notencontrar uma correspondência exata com qualquer membro do conjunto.NOT_CONTAINS tem suporte em listas: ao avaliar "
a NOT CONTAINS b", "a" pode ser uma lista. No entanto, "b" não pode ser um conjunto, um mapa ou uma lista. -
BEGINS_WITH: procura um prefixo.AttributeValueListpode conter apenas um elementoAttributeValuedo tipo String ou Binary (não um tipo Number ou Set). O atributo de destino da comparação deve ser do tipo String ou Binary (e não Number ou um tipo de conjunto). -
IN: procura elementos correspondentes dentro de dois conjuntos.AttributeValueListpode conter um ou mais elementosAttributeValuedo tipo String, Number ou Binary (não um tipo Set). Esses atributos são comparados com um atributo do tipo Set existente de um item. Se quaisquer elementos do conjunto de entradas estiverem presentes no atributo do item, a expressão será avaliada como verdadeira. -
BETWEEN: maior ou igual ao primeiro valor e menor ou igual ao segundo valor.AttributeValueListdeve conter dois elementosAttributeValuedo mesmo tipo, seja String, Number ou Binary (não um tipo Set). Um atributo de destino corresponderá se o valor de destino for maior que ou igual ao primeiro elemento e menor que ou igual ao segundo elemento. Se um item contém um elementoAttributeValuede um tipo diferente do fornecido na solicitação, os valores não coincidem. Por exemplo,{"S":"6"}não se compara a{"N":"6"}. Além disso,{"N":"6"}não se compara a{"NS":["6", "2", "1"]}
-
Os parâmetros a seguir podem ser usados em vez de AttributeValueList e ComparisonOperator:
-
Value- um valor para o DynamoDB comparar com um atributo. -
Exists- um valor Booleano que faz com que o DynamoDB avalie o valor antes de tentar a operação condicional:-
Se
Existsfortrue, o DynamoDB verificará se esse valor de atributo já existe na tabela. Se ele for encontrado, a condição será avaliada como verdadeira; caso contrário, a condição será avaliada como falsa. -
Se
Existsforfalse, o DynamoDB assumirá que o valor do atributonotexiste na tabela. Se, na verdade, o valor não existir, a suposição será válida e a condição será avaliada como verdadeira. Se o valor for encontrado, apesar da suposição de que ele não existe, a condição será avaliada como falsa.
Observe que o valor padrão para
Existsétrue. -
Os parâmetros Value e Exists são incompatíveis com AttributeValueList e ComparisonOperator. Observe que se você usar os dois conjuntos de parâmetros de uma só vez, o DynamoDB retornará uma exceção ValidationException.
nota
Este parâmetro não tem suporte a atributos do tipo List ou Map.
Use ConditionExpression em vez disso: exemplo
Suponha que você quisesse modificar um item na tabela Music, mas somente se uma determinada condição fosse verdadeira. Você poderia usar uma solicitação UpdateItem com um parâmetro Expected, como neste exemplo da 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"} ] } }'
Você pode usar ConditionExpression em vez disso:
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"} }'