Expected (herdado) - Amazon DynamoDB

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 do ComparisonOperator que 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 que A, e a é maior que B.

    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 na AttributeValueList. 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 | BETWEEN

    Veja 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um elemento AttributeValue de 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.

      AttributeValueList pode conter apenas um AttributeValue do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um AttributeValue de 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento AttributeValue de 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.

      AttributeValueList pode conter apenas um AttributeValue do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento AttributeValue de 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento AttributeValue de 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do tipo String, Number ou Binary (não um tipo Set). Se um item contém um elemento AttributeValue de 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 usando NOT_NULL, o resultado será um Boolean true. Isso acontece porque o atributo "a" existe; o tipo de dados não é relevante para o operador de comparação NOT_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 usando NULL, o resultado será um Boolean false. Isso acontece porque o atributo "a" existe; o tipo de dados não é relevante para o operador de comparação NULL.

    • CONTAINS : verifica uma subsequência ou valor em um conjunto.

      AttributeValueList pode conter apenas um elemento AttributeValue do 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do 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 ele does not encontrar 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.

      AttributeValueList pode conter apenas um elemento AttributeValue do 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.

      AttributeValueList pode conter um ou mais elementos AttributeValue do 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.

      AttributeValueList deve conter dois elementos AttributeValue do 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 elemento AttributeValue de 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 Exists for true, 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 Exists for false, o DynamoDB assumirá que o valor do atributo not existe 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"} }'