

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# CLI-Beispiel für DynamoDB-Bedingungsausdrücke
<a name="Expressions.ConditionExpressions"></a>

Im Folgenden finden Sie einige AWS Command Line Interface (AWS CLI) Beispiele für die Verwendung von Bedingungsausdrücken. Diese Beispiele basieren auf der Tabelle `ProductCatalog`, die in [Verweisen auf Elementattribute beim Verwenden von Ausdrücken in DynamoDB](Expressions.Attributes.md) eingeführt wurde. Der Partitionsschlüssel für diese Tabelle lautet `Id`. Es gibt keinen Sortierschlüssel. Die folgende `PutItem`-Operation erstellt ein `ProductCatalog`-Beispielelement, auf das wir uns in den Beispielen beziehen werden:

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

Die Argumente für `--item` werden in der Datei `item.json` gespeichert. (Der Einfachheit halber werden nur wenige Elementattribute verwendet.)

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

**Topics**
+ [Conditional Put (Bedingtes Setzen)](#Expressions.ConditionExpressions.PreventingOverwrites)
+ [Bedingte Löschungen](#Expressions.ConditionExpressions.AdvancedComparisons)
+ [Bedingte Aktualisierungen](#Expressions.ConditionExpressions.SimpleComparisons)
+ [Beispiele für bedingte Ausdrücke](#Expressions.ConditionExpressions.ConditionalExamples)

## Conditional Put (Bedingtes Setzen)
<a name="Expressions.ConditionExpressions.PreventingOverwrites"></a>

Die `PutItem`-Operation überschreibt ein Element mit demselben Primärschlüssel (falls vorhanden). Wenn Sie dies vermeiden möchten, verwenden Sie einen Bedingungsausdruck. Dies ermöglicht das Fortsetzen des Schreibvorgangs nur dann, wenn das in Frage stehende Element nicht bereits über denselben Primärschlüssel verfügt.

Im folgenden Beispiel wird mit `attribute_not_exists()` überprüft, ob der Primärschlüssel in der Tabelle vorhanden ist, bevor versucht wird, den Schreibvorgang durchzuführen. 

**Anmerkung**  
Wenn Ihr Primärschlüssel sowohl aus einem Partitionsschlüssel (pk) als auch aus einem Sortierschlüssel (sk) besteht, überprüft der Parameter, ob `attribute_not_exists(pk)` UND `attribute_not_exists(sk)` als gesamte Anweisung als wahr oder falsch ausgewertet werden, bevor versucht wird, den Schreibvorgang durchzuführen.

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

Wenn der Bedingungsausdruck mit „falsch“ ausgewertet wird, gibt DynamoDB die folgende Fehlermeldung zurück: Die bedingte Anforderung ist fehlgeschlagen.

**Anmerkung**  
Weitere Informationen zu `attribute_not_exists` und anderen Funktionen finden Sie unter [Bedingungs- und Filterausdrücke, Operatoren und Funktionen in DynamoDB](Expressions.OperatorsAndFunctions.md).

## Bedingte Löschungen
<a name="Expressions.ConditionExpressions.AdvancedComparisons"></a>

Um ein bedingtes Löschen durchzuführen, nutzen Sie eine `DeleteItem`-Operation mit einem Bedingungsausdruck. Der Bedingungsausdruck muss mit "true" ausgewertet werden, damit die Operation erfolgreich ist; andernfalls schlägt sie fehl.

Betrachten Sie das oben definierte Element.

Angenommen, Sie möchten das Element löschen, aber nur unter den folgenden Bedingungen:
+  Die `ProductCategory` ist entweder "Sportartikel" oder "Gartenzubehör".
+  Der `Price` liegt zwischen 500 und 600.

Im folgenden Beispiel wird versucht, das Element zu löschen:

```
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
```

Die Argumente für `--expression-attribute-values` werden in der Datei `values.json` gespeichert.

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

**Anmerkung**  
In dem Bedingungsausdruck weist der `:` (Doppelpunkt) auf einen *Ausdrucksattributwert* hin – Platzhalter für den tatsächlichen Wert. Weitere Informationen finden Sie unter [Verwenden von Ausdrucksattributwerten in DynamoDB](Expressions.ExpressionAttributeValues.md).  
Weitere Informationen zu `IN`, `AND` und anderen Schlüsselwörtern finden Sie unter [Bedingungs- und Filterausdrücke, Operatoren und Funktionen in DynamoDB](Expressions.OperatorsAndFunctions.md).

In diesem Beispiel wird der `ProductCategory`-Vergleich mit True, aber der `Price`-Vergleich mit False ausgewertet. Dadurch wird der Bedingungsausdruck mit "false" ausgewertet und die `DeleteItem`-Operation schlägt fehl.

## Bedingte Aktualisierungen
<a name="Expressions.ConditionExpressions.SimpleComparisons"></a>

Um eine bedingte Aktualisierung durchzuführen, nutzen Sie eine `UpdateItem`-Operation mit einem Bedingungsausdruck. Der Bedingungsausdruck muss mit "true" ausgewertet werden, damit die Operation erfolgreich ist; andernfalls schlägt sie fehl.

**Anmerkung**  
`UpdateItem` unterstützt auch *Aktualisierungsausdrücke*, in denen Sie die gewünschten Änderungen festlegen, die Sie an einem Element durchführen möchten. Weitere Informationen finden Sie unter [Verwenden von Aktualisierungsausdrücken in DynamoDB](Expressions.UpdateExpressions.md).

Angenommen, Sie beginnen mit dem oben definierten Element.

Das folgende Beispiel führt eine `UpdateItem`-Operation durch. Es versucht, den `Price` eines Produkts um 75 zu reduzieren – der Bedingungsausdruck verhindert jedoch die Aktualisierung, wenn der aktuelle `Price` unter 500 liegt.

```
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
```

Die Argumente für `--expression-attribute-values` werden in der Datei `values.json` gespeichert.

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

Wenn der Start-`Price` 650 ist, reduziert die `UpdateItem`-Operation den `Price` auf 575. Wenn Sie die `UpdateItem`-Operation erneut ausführen, wird der `Price` auf 500 reduziert. Wenn Sie ein drittes Mal ausführen, wird der Bedingungsausdruck mit False ausgewertet und die Aktualisierung schlägt fehl.

**Anmerkung**  
In dem Bedingungsausdruck weist der `:` (Doppelpunkt) auf einen *Ausdrucksattributwert* hin – Platzhalter für den tatsächlichen Wert. Weitere Informationen finden Sie unter [Verwenden von Ausdrucksattributwerten in DynamoDB](Expressions.ExpressionAttributeValues.md).  
Weitere Informationen zu "*>*" und anderen Operatoren finden Sie unter [Bedingungs- und Filterausdrücke, Operatoren und Funktionen in DynamoDB](Expressions.OperatorsAndFunctions.md).

## Beispiele für bedingte Ausdrücke
<a name="Expressions.ConditionExpressions.ConditionalExamples"></a>

Weitere Hinweise zu den Funktionen, die in den folgenden Beispielen verwendet werden, finden Sie unter [Bedingungs- und Filterausdrücke, Operatoren und Funktionen in DynamoDB](Expressions.OperatorsAndFunctions.md). Weitere Informationen zum Angeben verschiedener Attributtypen in einem Ausdruck finden Sie unter [Verweisen auf Elementattribute beim Verwenden von Ausdrücken in DynamoDB](Expressions.Attributes.md). 

### Überprüfen der Attribute in einem Element
<a name="Expressions.ConditionExpressions.CheckingForAttributes"></a>

Sie können das Vorhandensein (oder Fehlen) jedes Attributs überprüfen. Wenn der Bedingungsausdruck mit "true" ausgewertet wird, ist die Operation erfolgreich; andernfalls schlägt sie fehl.

Das folgenden Beispiel verwendet `attribute_not_exists` zum Löschen eines Produkts nur, wenn es noch nicht über ein `Price`-Attribut verfügt:

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

DynamoDB stellt auch eine `attribute_exists`-Funktion bereit. Das folgende Beispiel löscht ein Produkt nur dann, wenn es schlechte Bewertungen erhalten hat.

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

### Prüfung auf Attributtyp
<a name="Expressions.ConditionExpressions.CheckingForAttributeType"></a>

Mit der `attribute_type`-Funktion können Sie den Datentyp eines Attributwerts überprüfen. Wenn der Bedingungsausdruck mit "true" ausgewertet wird, ist die Operation erfolgreich; andernfalls schlägt sie fehl.

Im folgenden Beispiel wird `attribute_type` nur dann zum Löschen eines Produkts verwendet, wenn es über ein `Color`-Attribut des Typs String Set verfügt. 

```
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
```

Die Argumente für `--expression-attribute-values` sind in der expression-attribute-values JSON-Datei gespeichert.

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

### Prüfen des Startwerts der Zeichenfolge
<a name="Expressions.ConditionExpressions.CheckingBeginsWith"></a>

Sie können überprüfen, ob ein Zeichenfolge-Attributwert mit einer bestimmten Teilzeichenfolge beginnt, indem Sie die `begins_with`-Funktion verwenden. Wenn der Bedingungsausdruck mit "true" ausgewertet wird, ist die Operation erfolgreich; andernfalls schlägt sie fehl. 

Im folgenden Beispiel wird `begins_with` nur dann zum Löschen eines Produkts verwendet, wenn das `FrontView`-Element der `Pictures`-Karte mit einem bestimmten Wert beginnt.

```
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
```

Die Argumente für `--expression-attribute-values` werden in der expression-attribute-values JSON-Datei gespeichert.

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

### Prüfen auf ein Element in einem Satz
<a name="Expressions.ConditionExpressions.CheckingForContains"></a>

Sie können nach einem Element in einem Satz oder nach einer Teilzeichenfolge innerhalb einer Zeichenfolge suchen, indem Sie die `contains`-Funktion verwenden. Wenn der Bedingungsausdruck mit "true" ausgewertet wird, ist die Operation erfolgreich; andernfalls schlägt sie fehl. 

Im folgenden Beispiel wird `contains` nur dann zum Löschen eines Produkts verwendet, wenn der `Color`-Zeichenfolgensatz ein Element mit einem bestimmten Wert aufweist. 

```
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
```

Die Argumente für `--expression-attribute-values` werden in der expression-attribute-values JSON-Datei gespeichert.

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

### Überprüfen der Größe eines Attributwerts
<a name="Expressions.ConditionExpressions.CheckingForSize"></a>

Sie können die Größe eines Attributwerts überprüfen, indem Sie die `size`-Funktion verwenden. Wenn der Bedingungsausdruck mit "true" ausgewertet wird, ist die Operation erfolgreich; andernfalls schlägt sie fehl. 

Im folgenden Beispiel wird `size` nur dann zum Löschen eines Produkts verwendet, wenn die Größe des `VideoClip`-Binärattributs größer als `64000` Byte ist. 

```
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
```

Die Argumente für `--expression-attribute-values` werden in der expression-attribute-values JSON-Datei gespeichert.

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