Scrittura di condizioni con parametri legacy - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scrittura di condizioni con parametri legacy

Nota

Consigliamo di utilizzare i nuovi parametri di espressione piuttosto che i parametri precedenti, se possibile. Per ulteriori informazioni, consulta Utilizzo di espressioni in DynamoDB.

Nella sezione seguente viene descritto come scrivere le condizioni da utilizzare con i parametri legacy, ad esempio Expected, QueryFilter e ScanFilter.

Nota

Le nuove applicazioni dovrebbero invece utilizzare i parametri di espressione. Per ulteriori informazioni, consulta Utilizzo di espressioni in DynamoDB.

Condizioni semplici

Con i valori degli attributi, è possibile scrivere condizioni per i confronti rispetto agli attributi della tabella. Una condizione restituisce sempre true o false ed è costituita da:

  • ComparisonOperator: maggiore di, minore di, uguale a e così via.

  • AttributeValueList (facoltativo): i valori degli attributi da confrontare. A seconda di ComparisonOperator utilizzato, AttributeValueList potrebbe contenere uno, due o più valori; o potrebbe non essere affatto presente.

Nelle sezioni seguenti sono descritti i vari operatori di confronto e sono riportati gli esempi di come utilizzarli nelle condizioni.

Operatori di confronto senza valori di attributo

  • NOT_NULL: true se esiste un attributo.

  • NULL: true se non esiste un attributo.

Utilizza questi operatori per verificare se un attributo esiste o non esiste. Poiché non vi è alcun valore da confrontare, non specificare AttributeValueList.

Esempio

La seguente espressione restituisce true se l'attributo Dimensions esiste.

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

Operatori di confronto con un valore di attributo

  • EQ: true se un attributo è uguale a un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number, Binary, String Set, Number Set o Binary Set. Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde. Ad esempio, la stringa "3" non è uguale al numero 3. Inoltre, il numero 3 non è uguale al set di numeri [3, 2, 1].

  • NE: true se un attributo non è uguale a un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number, Binary, String Set, Number Set o Binary Set. Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

  • LE: true se un attributo è minore o uguale a un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un AttributeValue di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

  • LT: true se un attributo è minore di un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

  • GE: true se un attributo è maggiore o uguale a un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

  • GT: true se un attributo è maggiore di un valore.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

  • CONTAINS: true se un valore è presente all'interno di un set o se un valore ne contiene un altro.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se l'attributo di destinazione del confronto è di tipo String, l'operatore controlla la presenza di una corrispondenza di sottostringa. Se l'attributo di destinazione del confronto è di tipo Binary, l'operatore cerca una sottosequenza della destinazione che corrisponde all'input. Se l'attributo di destinazione del confronto è di tipo Set, l'operatore restituisce true se trova una corrispondenza esatta con qualsiasi membro del set.

  • NOT_CONTAINS: true se un valore non è presente all'interno di un set o se un valore ne contiene un altro.

    AttributeValueList può contenere solo un valore di tipo String, Number o Binary (non un tipo Set). Se l'attributo di destinazione del confronto è String, l'operatore verifica l'assenza di una corrispondenza di sottostringa. Se l'attributo di destinazione del confronto è Binary, l'operatore verifica l'assenza di una sottosequenza della destinazione che corrisponde all'input. Se l'attributo di destinazione del confronto è di tipo Set, l'operatore restituisce true se non trova una corrispondenza esatta con qualsiasi membro del set.

  • BEGINS_WITH: true se i primi caratteri di un attributo corrispondono al valore fornito. Non utilizzare questo operatore per confrontare i numeri.

    AttributeValueList può contenere solo un valore di tipo String o Binary (non un tipo Number o Set). L'attributo di destinazione del confronto deve essere String o Binary (non Number o un set).

Utilizza questi operatori per confrontare un attributo con un valore. È necessario specificare un AttributeValueList costituito da un valore singolo. Per la maggior parte degli operatori, questo valore deve essere uno scalare; tuttavia, gli operatori EQ e NE supportano anche i set.

Examples (Esempi)

Le seguenti espressioni restituiscono true se:

  • Il prezzo di un prodotto è maggiore di 100.

    ... "Price": { ComparisonOperator: "GT", AttributeValueList: [ {"N":"100"} ] } ...
  • Una categoria di prodotti inizia con "Bo".

    ... "ProductCategory": { ComparisonOperator: "BEGINS_WITH", AttributeValueList: [ {"S":"Bo"} ] } ...
  • Un prodotto è disponibile in rosso, verde o nero:

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

    Quando si confrontano i tipi di dati Set, l'ordine degli elementi non ha importanza. DynamoDB restituirà solo gli elementi con lo stesso set di valori, indipendentemente dall'ordine in cui vengono specificati nella richiesta.

Operatori di confronto con due valori di attributo

  • BETWEEN: true se un valore è compreso tra un limite inferiore e un limite superiore, endpoint inclusi.

    AttributeValueList deve contenere due elementi dello stesso tipo, String, Number o Binary (non un tipo Set). Un attributo di destinazione corrisponde se il valore di destinazione è maggiore o uguale al primo elemento e minore o uguale al secondo elemento. Se un elemento contiene un valore di un tipo diverso da quello specificato nella richiesta, il valore non corrisponde.

Utilizza questo operatore per determinare se un valore di attributo è compreso in un intervallo. AttributeValueList deve contenere due elementi scalari dello stesso tipo: String, Number o Binary.

Esempio

L'espressione seguente restituisce true se il prezzo di un prodotto è compreso tra 100 e 200.

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

Operatori di confronto con N valori di attributo

  • IN: true se un valore è uguale a uno qualsiasi dei valori in un elenco enumerato. Nell'elenco sono supportati solo i valori scalari, non i set. Per corrispondere, l'attributo di destinazione deve essere dello stesso tipo e valore esatto.

    AttributeValueList può contenere uno o più elementi di tipo String, Number o Binary (non un tipo Set). Questi attributi vengono confrontati con un attributo di tipo non Set esistente di un elemento. Se nell'attributo dell'elemento è presente qualsiasi elemento del set di input, l'espressione restituisce true.

    AttributeValueList può contenere uno o più valori di tipo String, Number o Binary (non un tipo Set). Per corrispondere, l'attributo di destinazione del confronto deve essere dello stesso tipo e valore esatto. Una valore stringa non corrisponde mai a un set di stringhe.

Utilizza questo operatore per determinare se il valore fornito è incluso in un elenco numerato. È possibile specificare un numero qualsiasi di valori scalari in AttributeValueList, ma devono essere tutti dello stesso tipo di dati.

Esempio

L'espressione seguente restituisce true se il valore per Id è 201, 203 o 205.

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

Utilizzo di più condizioni

DynamoDB consente di combinare più condizioni per formare espressioni complesse. Questa operazione viene eseguita fornendo almeno due espressioni, con un ConditionalOperator (eredità) facoltativo.

Per impostazione predefinita, quando si specifica più di una condizione, tutte le condizioni devono restituire true affinché l'intera espressione restituisca true. In altre parole, ha luogo un'ANDoperazione implicita.

Esempio

L'espressione seguente restituisce true se un prodotto è un libro che ha almeno 600 pagine. Entrambe le condizioni devono essere considerate vere, poiché sono implicitamente unite insieme AND.

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

È possibile utilizzare ConditionalOperator (eredità) per chiarire che verrà ANDeseguita un'operazione. L'esempio seguente si comporta allo stesso modo del precedente.

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

È possibile impostare ConditionalOperator anche su OR, il che significa che almeno una delle condizioni deve restituire true.

Esempio

La seguente espressione restituisce true se un prodotto è una mountain bike, se si tratta di un marchio particolare o se il suo prezzo è maggiore di 100.

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

In un'espressione complessa, le condizioni vengono elaborate in ordine, dalla prima all'ultima condizione.

Non è possibile utilizzare entrambi AND e OR in una singola espressione.

Altri operatori condizionali

Nelle versioni precedenti di DynamoDB, il parametro Expected si comportava in modo diverso per le scritture condizionali. Ogni elemento nella mappa Expected rappresentava un nome di attributo per il controllo di DynamoDB, insieme a quanto segue:

  • Value: un valore da confrontare con l'attributo.

  • Exists: determina se il valore esiste prima di provare l'operazione.

Le opzioni Value e Exists continuano a essere supportate in DynamoDB; tuttavia, consentono solo di verificare una condizione di uguaglianza o se esiste un attributo. Consigliamo di utilizzare invece ComparisonOperator e AttributeValueList, perché queste opzioni consentono di costruire una gamma molto più ampia di condizioni.

Esempio

DeleteItem può verificare se un libro non è più in pubblicazione ed eliminarlo solo se questa condizione è true. Ecco un esempio AWS CLI che utilizza una condizione legacy:

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

L'esempio seguente fa la stessa cosa, ma non usa una condizione legacy:

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

Una operazione PutItem può proteggere dalla sovrascrittura di un elemento esistente con gli stessi attributi della chiave primaria. Ecco un esempio che utilizza una condizione legacy:

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

L'esempio seguente fa la stessa cosa, ma non usa una condizione legacy:

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

Per le condizioni nella mappa Expected, non utilizzare le opzioni Value e Exists legacy insieme a ComparisonOperator e AttributeValueList. Se si utilizzano, la scrittura condizionale non avrà esito positivo.