

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exemple de commande CLI d’expression de condition DynamoDB
<a name="Expressions.ConditionExpressions"></a>

Voici quelques AWS Command Line Interface (AWS CLI) exemples d'utilisation d'expressions de condition. Ces exemples sont basés sur la table `ProductCatalog`, qui a été présentée dans [Référencement d’attributs d’élément lors de l’utilisation d’expressions dans DynamoDB](Expressions.Attributes.md). La clé de partition de cette table est `Id` ; il n’y a aucune clé de tri. L’opération `PutItem` suivante crée un exemple d’élément `ProductCatalog` auquel nous ferons référence dans les exemples.

```
aws dynamodb put-item \
    --table-name ProductCatalog \
    --item file://item.json
```

Les arguments de la fonction `--item` sont stockés dans le fichier `item.json`. Dans un souci de simplicité, seuls quelques attributs sont utilisés.

```
{
    "Id": {"N": "456" },
    "ProductCategory": {"S": "Sporting Goods" },
    "Price": {"N": "650" }
}
```

**Topics**
+ [Insertion conditionnelle](#Expressions.ConditionExpressions.PreventingOverwrites)
+ [Suppressions conditionnelles](#Expressions.ConditionExpressions.AdvancedComparisons)
+ [Mises à jour conditionnelles](#Expressions.ConditionExpressions.SimpleComparisons)
+ [Exemples d’expressions conditionnelles](#Expressions.ConditionExpressions.ConditionalExamples)

## Insertion conditionnelle
<a name="Expressions.ConditionExpressions.PreventingOverwrites"></a>

L’opération `PutItem` remplace un élément avec la même clé primaire (le cas échéant). Vous pouvez éviter cela à l’aide d’une expression de condition. Elle permet la poursuite de l’écriture seulement si l’élément en question ne possède pas déjà la même clé primaire.

L’exemple suivant vérifie si la clé primaire existe dans la table à l’aide de la fonction `attribute_not_exists()` avant de tenter l’opération d’écriture. 

**Note**  
Si votre clé primaire comprend à la fois une clé de partition (pk) et une clé de tri (sk), le paramètre vérifie si `attribute_not_exists(pk)` ET `attribute_not_exists(sk)` prennent la valeur true ou false avant de tenter l’opération d’écriture.

```
aws dynamodb put-item \
    --table-name ProductCatalog \
    --item file://item.json \
    --condition-expression "attribute_not_exists(Id)"
```

Si l’expression de condition prend la valeur false, DynamoDB renvoie le message d’erreur suivant : The conditional request failed (Échec de la demande conditionnelle).

**Note**  
Pour en savoir plus sur `attribute_not_exists` et d’autres fonctions, consultez [Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB](Expressions.OperatorsAndFunctions.md).

## Suppressions conditionnelles
<a name="Expressions.ConditionExpressions.AdvancedComparisons"></a>

Effectuez une suppression conditionnelle à l’aide d’une opération `DeleteItem` avec une expression de condition. L’expression de condition doit avoir la valeur true afin que l’opération aboutisse. Dans le cas contraire, l’opération échoue.

Tenez compte de l’élément défini ci-dessus.

Supposons maintenant que vous souhaitiez supprimer l’élément, mais uniquement dans les conditions suivantes :
+  L’attribut `ProductCategory` est soit « Sporting Goods » (Matériels de sport), soit « Gardening Supplies » (Articles de jardinerie).
+  La valeur de l’attribut `Price` est comprise entre 500 et 600.

L’exemple suivant tente de supprimer l’élément.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id":{"N":"456"}}' \
    --condition-expression "(ProductCategory IN (:cat1, :cat2)) and (Price between :lo and :hi)" \
    --expression-attribute-values file://values.json
```

Les arguments de la fonction `--expression-attribute-values` sont stockés dans le fichier `values.json`.

```
{
    ":cat1": {"S": "Sporting Goods"},
    ":cat2": {"S": "Gardening Supplies"},
    ":lo": {"N": "500"},
    ":hi": {"N": "600"}
}
```

**Note**  
Dans l’expression de condition, le signe `:` (deux points) indique une *valeur d’attribut d’expression*, c’est-à-dire un espace réservé pour une valeur réelle. Pour de plus amples informations, veuillez consulter [Utilisation de valeurs d’attributs d’expression dans DynamoDB](Expressions.ExpressionAttributeValues.md).  
Pour en savoir plus sur `IN`, `AND` et d’autres mots clés, consultez [Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB](Expressions.OperatorsAndFunctions.md).

Dans cet exemple, la comparaison `ProductCategory` a la valeur true, mais la comparaison `Price` a la valeur false. Par conséquent, l’expression de condition prend la valeur false et l’opération `DeleteItem` échoue.

## Mises à jour conditionnelles
<a name="Expressions.ConditionExpressions.SimpleComparisons"></a>

Effectuez une mise à jour conditionnelle à l’aide d’une opération `UpdateItem` avec une expression de condition. L’expression de condition doit avoir la valeur true afin que l’opération aboutisse. Dans le cas contraire, l’opération échoue.

**Note**  
`UpdateItem` prend également en charge les *expressions de mise à jour*, dans lesquelles vous spécifiez les modifications à apporter à un élément. Pour de plus amples informations, veuillez consulter [Utilisation d’expressions de mise à jour dans DynamoDB](Expressions.UpdateExpressions.md).

Supposons que vous commenciez avec l’élément défini ci-dessus.

L’exemple suivant effectue une opération `UpdateItem`. Elle tente de réduire la valeur de l’attribut `Price` d’un produit de 75, mais l’expression de condition empêche la mise à jour si la valeur actuelle de l’attribut `Price` est inférieure à 500.

```
aws dynamodb update-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --update-expression "SET Price = Price - :discount" \
    --condition-expression "Price > :limit" \
    --expression-attribute-values file://values.json
```

Les arguments de la fonction `--expression-attribute-values` sont stockés dans le fichier `values.json`.

```
{
    ":discount": { "N": "75"},
    ":limit": {"N": "500"}
}
```

Si la valeur de départ de l’attribut `Price` est 650, l’opération `UpdateItem` réduit la valeur de l’attribut `Price` à 575. Si vous réexécutez l’opération `UpdateItem`, la valeur de l’attribut `Price` est réduite à 500. Si vous l’exécutez une troisième fois, l’expression de condition prend la valeur false et l’opération de mise à jour échoue.

**Note**  
Dans l’expression de condition, le signe `:` (deux points) indique une *valeur d’attribut d’expression*, c’est-à-dire un espace réservé pour une valeur réelle. Pour de plus amples informations, veuillez consulter [Utilisation de valeurs d’attributs d’expression dans DynamoDB](Expressions.ExpressionAttributeValues.md).  
Pour en savoir plus sur « *>* » et d’autres opérateurs, consultez [Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB](Expressions.OperatorsAndFunctions.md).

## Exemples d’expressions conditionnelles
<a name="Expressions.ConditionExpressions.ConditionalExamples"></a>

Pour en savoir plus sur les fonctions utilisées dans les exemples suivants, consultez [Expressions de condition et de filtre, opérateurs et fonctions dans DynamoDB](Expressions.OperatorsAndFunctions.md). Pour en savoir plus sur la spécification de différents types d’attributs dans une expression, consultez [Référencement d’attributs d’élément lors de l’utilisation d’expressions dans DynamoDB](Expressions.Attributes.md). 

### Vérification des attributs d’un élément
<a name="Expressions.ConditionExpressions.CheckingForAttributes"></a>

Vous pouvez vérifier l’existence (ou la non-existence) d’un attribut. Si l’expression de condition a la valeur true, l’opération aboutit. Dans le cas contraire, l’opération échoue.

L’exemple suivant supprime un produit seulement s’il ne possède pas d’attribut `Price` à l’aide de `attribute_not_exists`.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_not_exists(Price)"
```

DynamoDB fournit également une fonction `attribute_exists`. L’exemple suivant supprime un produit seulement si les commentaires le concernant sont négatifs.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_exists(ProductReviews.OneStar)"
```

### Vérification du type d’attribut
<a name="Expressions.ConditionExpressions.CheckingForAttributeType"></a>

Vous pouvez vérifier le type de données d’une valeur d’attribut à l’aide de la fonction `attribute_type`. Si l’expression de condition a la valeur true, l’opération aboutit. Dans le cas contraire, l’opération échoue.

L’exemple suivant supprime un produit seulement s’il possède un attribut `Color` de type String Set à l’aide de `attribute_type`. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "attribute_type(Color, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Les arguments pour `--expression-attribute-values` sont stockés dans le fichier expression-attribute-values .json.

```
{
    ":v_sub":{"S":"SS"}
}
```

### Vérification de la valeur de début de la chaîne
<a name="Expressions.ConditionExpressions.CheckingBeginsWith"></a>

Vous pouvez vérifier si une valeur d’attribut String commence par une sous-chaîne spécifique à l’aide de la fonction `begins_with`. Si l’expression de condition a la valeur true, l’opération aboutit. Dans le cas contraire, l’opération échoue. 

L’exemple suivant supprime un produit seulement si l’élément `FrontView` de la carte `Pictures` commence par une valeur spécifique à l’aide de `begins_with`.

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "begins_with(Pictures.FrontView, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Les arguments pour `--expression-attribute-values` sont stockés dans le fichier expression-attribute-values .json.

```
{
    ":v_sub":{"S":"http://"}
}
```

### Recherche d’un élément dans un ensemble
<a name="Expressions.ConditionExpressions.CheckingForContains"></a>

Vous pouvez rechercher un élément dans un ensemble ou rechercher une sous-chaîne dans une chaîne à l’aide de la fonction `contains`. Si l’expression de condition a la valeur true, l’opération aboutit. Dans le cas contraire, l’opération échoue. 

L’exemple suivant supprime un produit seulement si l’attribut de type String Set `Color` comporte un élément avec une valeur spécifique à l’aide de `contains`. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "contains(Color, :v_sub)" \
    --expression-attribute-values file://expression-attribute-values.json
```

Les arguments pour `--expression-attribute-values` sont stockés dans le fichier expression-attribute-values .json.

```
{
    ":v_sub":{"S":"Red"}
}
```

### Vérification de la taille d’une valeur d’attribut
<a name="Expressions.ConditionExpressions.CheckingForSize"></a>

Vous pouvez vérifier la taille d’une valeur d’attribut à l’aide de la fonction `size`. Si l’expression de condition a la valeur true, l’opération aboutit. Dans le cas contraire, l’opération échoue. 

L’exemple suivant supprime un produit seulement si la taille du binary attribute `VideoClip` est supérieure à `64000` octets à l’aide de `size`. 

```
aws dynamodb delete-item \
    --table-name ProductCatalog \
    --key '{"Id": {"N": "456"}}' \
    --condition-expression "size(VideoClip) > :v_sub" \
    --expression-attribute-values file://expression-attribute-values.json
```

Les arguments pour `--expression-attribute-values` sont stockés dans le fichier expression-attribute-values .json.

```
{
    ":v_sub":{"N":"64000"}
}
```