Criar condições com parâmetros herdados - Amazon DynamoDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criar condições com parâmetros herdados

nota

Sugerimos que você use os novos parâmetros de expressão, em vez desses parâmetros herdados. Para obter mais informações, consulte Usar expressões no DynamoDB.

A seção a seguir descreve como criar condições a serem usadas com parâmetros herdados, como Expected, QueryFilter e ScanFilter.

nota

Em vez disso, as novas aplicações devem usar parâmetros de expressão. Para obter mais informações, consulte Usar expressões no DynamoDB.

Condições simples

Com valores de atributo, você pode escrever condições para comparações com atributos da tabela. Uma condição sempre é avaliada como verdadeira ou falsa, e consiste em:

  • ComparisonOperator - maior que, menor que, igual a e assim por diante.

  • AttributeValueList (opcional): valores de atributo para comparar. Dependendo do ComparisonOperator que está sendo usado, AttributeValueList pode conter um, dois ou mais valores ou pode não estar presente.

As seções a seguir descrevem os vários operadores de comparação, juntamente com exemplos de como usá-los em condições.

Operadores de comparação sem valores de atributo

  • NOT_NULL - verdadeiro se um atributo existir.

  • NULL - verdadeiro se um atributo não existir.

Use esses operadores para verificar se um atributo existe ou não. Como não há valor de comparação, não especifique AttributeValueList.

Exemplo

A expressão a seguir é avaliada como verdadeira se o atributo Dimensions existir.

... "Dimensions": { ComparisonOperator: "NOT_NULL" } ...

Operadores de comparação com um valor de atributo

  • EQ - verdadeiro se um atributo for igual a um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um valor de um tipo diferente do especificado na solicitação, os valores não coincidem. Por exemplo, a string "3" não é igual ao número 3. Além disso, o número 3 não é igual ao conjunto de números [3, 2, 1].

  • NE - verdadeiro se um atributo não for igual a um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number, Binary, String Set, Number Set ou Binary Set. Se um item contém um valor de um tipo diferente do especificado na solicitação, os valores não coincidem.

  • LE - verdadeiro se um atributo for menor ou igual a um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number ou Binary (não um tipo Set). Se um item contém um AttributeValue de um valor diferente do especificado na solicitação, os valores não coincidem.

  • LT - verdadeiro se um atributo for menor que um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number ou Binary (não um tipo Set). Se um item contém um valor de um tipo diferente do especificado na solicitação, os valores não coincidem.

  • GE - verdadeiro se um atributo for maior ou igual a um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number ou Binary (não um tipo Set). Se um item contém um valor de um tipo diferente do especificado na solicitação, os valores não coincidem.

  • GT - verdadeiro se um atributo é maior que um valor.

    AttributeValueList pode conter apenas um valor do tipo String, Number ou Binary (não um tipo Set). Se um item contém um valor de um tipo diferente do especificado na solicitação, os valores não coincidem.

  • CONTAINS - verdadeiro se um valor estiver presente em um conjunto ou se um valor contiver outro.

    AttributeValueList pode conter apenas um valor do tipo String, Number ou Binary (não um tipo Set). Se o atributo de destino da comparação for String, o operador procurará uma substring correspondente. Se o atributo de destino da comparação for Binary, o operador procurará uma subsequência do destino que corresponda à entrada. Se o atributo de destino da comparação for um conjunto, o operador será avaliado como verdadeiro caso encontre uma correspondência exata com qualquer membro do conjunto.

  • NOT_CONTAINS - verdadeiro se um valor não estiver presente em um conjunto, ou se um valor não contiver outro valor.

    AttributeValueList pode conter apenas um valor 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, o operador será avaliado como verdadeiro se ele não encontrar uma correspondência exata com qualquer membro do conjunto.

  • BEGINS_WITH: verdadeiro se os primeiros caracteres de um atributo corresponderem ao valor fornecido. Não use este operador para comparar números.

    AttributeValueList pode conter apenas um valor do tipo String ou Binary (não um tipo Number ou Set). O atributo de destino da comparação deve ser String ou Binary (não Number ou um conjunto).

Use esses operadores para comparar um atributo com um valor. Você deve especificar um AttributeValueList consistindo em um único valor. Para a maioria dos operadores, esse valor deve ser escalar. No entanto, os operadores EQ e NE também dão suporte a conjuntos.

Exemplos

As expressões a seguir serão avaliadas como verdadeiras se:

  • O preço de um produto for maior que 100.

    ... "Price": { ComparisonOperator: "GT", AttributeValueList: [ {"N":"100"} ] } ...
  • A categoria de um produto começar com "Bo".

    ... "ProductCategory": { ComparisonOperator: "BEGINS_WITH", AttributeValueList: [ {"S":"Bo"} ] } ...
  • Um produto estiver disponível em vermelho, verde ou preto:

    ... "Color": { ComparisonOperator: "EQ", AttributeValueList: [ [ {"S":"Black"}, {"S":"Red"}, {"S":"Green"} ] ] } ...
    nota

    Ao comparar tipos de dados Set, a ordem dos elementos não importa. O DynamoDB retornará apenas os itens com o mesmo conjunto de valores, independentemente da ordem em que você especificá-los em sua solicitação.

Operadores de comparação com dois valores de atributo

  • BETWEEN - verdadeiro se um valor for entre um limite inferior e um limite superior, inclusive endpoints.

    AttributeValueList deve conter dois elementos do mesmo tipo, seja String, Number ou Binary (não 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 valor de um tipo diferente do especificado na solicitação, os valores não coincidem.

Use este operador para determinar se um valor de atributo está dentro de um intervalo. A AttributeValueList deve conter dois elementos escalares do mesmo tipo – String, Number ou Binary.

Exemplo

A expressão a seguir será avaliada como verdadeira, se o preço de um produto estiver entre 100 e 200.

... "Price": { ComparisonOperator: "BETWEEN", AttributeValueList: [ {"N":"100"}, {"N":"200"} ] } ...

Operadores de comparação com n valores de atributo

  • IN: verdadeiro se um valor for igual a qualquer um dos valores em uma lista enumerada. Somente valores escalares são aceitos na lista, mas não conjuntos. O atributo de destino deve ser do mesmo tipo e o valor exato para corresponder.

    AttributeValueList pode conter um ou mais elementos do tipo String, Number ou Binary (não um tipo Set). Esses atributos são comparados com um atributo do tipo que não é 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.

    AttributeValueList pode conter um ou mais valores do tipo String, Number ou Binary (não um tipo Set). O atributo de destino da comparação deve ser do mesmo tipo e ter o valor exato para corresponder. Um atributo String nunca corresponde a um String set.

Use este operador para determinar se o valor fornecido está em uma lista enumerada. Você pode especificar qualquer número de valores escalares em AttributeValueList, mas todos eles devem ser do mesmo tipo de dados.

Exemplo

A expressão a seguir será avaliada como verdadeira se o valor para Id for 201, 203 ou 205.

... "Id": { ComparisonOperator: "IN", AttributeValueList: [ {"N":"201"}, {"N":"203"}, {"N":"205"} ] } ...

Uso de várias condições

O DynamoDB permite combinar várias condições para formar expressões complexas. Isso é feito ao fornecer pelo menos duas expressões, com um ConditionalOperator (herdado) opcional.

Por padrão, quando você especifica mais de uma condição, todas as condições devem ser avaliadas como verdadeiras para que a expressão inteira também seja avaliada assim. Em outras palavras, uma operação AND implícita acontece.

Exemplo

A expressão a seguir será avaliada como verdadeira se um produto for um livro que tem 600 páginas, pelo menos. Ambas as condições devem ser avaliadas como verdadeiras, já que elas são implicitamente ANDed (associadas).

... "ProductCategory": { ComparisonOperator: "EQ", AttributeValueList: [ {"S":"Book"} ] }, "PageCount": { ComparisonOperator: "GE", AttributeValueList: [ {"N":600"} ] } ...

Você pode usar ConditionalOperator (herdado) para esclarecer que uma operação AND acontecerá. O exemplo a seguir se comporta da mesma forma que o anterior.

... "ConditionalOperator" : "AND", "ProductCategory": { "ComparisonOperator": "EQ", "AttributeValueList": [ {"N":"Book"} ] }, "PageCount": { "ComparisonOperator": "GE", "AttributeValueList": [ {"N":600"} ] } ...

Você também pode definir ConditionalOperator como OR, o que significa que pelo menos uma das condições deve ser avaliada como verdadeira.

Exemplo

A expressão a seguir será avaliada como verdadeira, se um produto for uma mountain bike, se ele for de uma marca específica ou se o preço for maior que 100.

... ConditionalOperator : "OR", "BicycleType": { "ComparisonOperator": "EQ", "AttributeValueList": [ {"S":"Mountain" ] }, "Brand": { "ComparisonOperator": "EQ", "AttributeValueList": [ {"S":"Brand-Company A" ] }, "Price": { "ComparisonOperator": "GT", "AttributeValueList": [ {"N":"100"} ] } ...
nota

Em uma expressão complexa, as condições são processadas na ordem, da primeira condição para a última.

Não é possível usar AND e OR em uma única expressão.

Outros operadores condicionais

Em versões anteriores do DynamoDB, o parâmetro Expected se comportava de forma diferente em gravações condicionais. Cada item no mapa Expected representava um nome de atributo para o DynamoDB verificar, juntamente com o seguinte:

  • Value - um valor para comparar com o atributo.

  • Exists - determina se o valor existe antes de tentar a operação.

As opções Value e Exists continuam a ter suporte no DynamoDB; no entanto, elas só permitem que você teste uma condição de igualdade ou se um atributo existe. Recomendamos que você use ComparisonOperator e AttributeValueList em vez disso, pois essas opções permitem que você crie uma gama muito maior de condições.

exemplo

Uma operação DeleteItem pode verificar se um livro não está mais em publicação e excluí-lo somente se essa condição for verdadeira. Veja um exemplo da AWS CLI que usa uma condição herdada:

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{ "Id": {"N":"600"} }' \ --expected '{ "InPublication": { "Exists": true, "Value": {"BOOL":false} } }'

O exemplo a seguir executa a mesma ação, mas não usa uma condição herdada:

aws dynamodb delete-item \ --table-name ProductCatalog \ --key '{ "Id": {"N":"600"} }' \ --expected '{ "InPublication": { "ComparisonOperator": "EQ", "AttributeValueList": [ {"BOOL":false} ] } }'
exemplo

Uma operação PutItem pode proteger contra a substituição de um item existente com os mesmos atributos da chave primária. Veja um exemplo da que usa uma condição herdada:

aws dynamodb put-item \ --table-name ProductCatalog \ --item '{ "Id": {"N":"500"}, "Title": {"S":"Book 500 Title"} }' \ --expected '{ "Id": { "Exists": false } }'

O exemplo a seguir executa a mesma ação, mas não usa uma condição herdada:

aws dynamodb put-item \ --table-name ProductCatalog \ --item '{ "Id": {"N":"500"}, "Title": {"S":"Book 500 Title"} }' \ --expected '{ "Id": { "ComparisonOperator": "NULL" } }'
nota

Para condições no mapa Expected, não use as opções herdadas Value e Exists com ComparisonOperator e AttributeValueList. Se você fizer isso, sua gravação condicional falhará.