Bedingungsausdrücke - Amazon-DynamoDB

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.

Bedingungsausdrücke

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 bei der Verwendung von Ausdrücken in DynamoDB 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" } }

Conditional Put (Bedingtes Setzen)

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 vor dem Schreibvorgang, ob als gesamte Anweisung wahr oder falsch attribute_not_exists(pk) AND attribute_not_exists(sk) ausgewertet wird.

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.

Bedingte Löschungen

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

Weitere Informationen zu IN, AND und anderen Schlüsselwörtern finden Sie unter Bedingungs- und Filterausdrücke, Operatoren und Funktionen.

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

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 Aktualisierungsausdrücke.

Angenommen, Sie haben mit dem oben definierten Element begonnen.

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

Weitere Informationen zu ">" und anderen Operatoren finden Sie unter Bedingungs- und Filterausdrücke, Operatoren und Funktionen.

Beispiele für bedingte Ausdrücke

Weitere Hinweise zu den Funktionen, die in den folgenden Beispielen verwendet werden, finden Sie unter Bedingungs- und Filterausdrücke, Operatoren und Funktionen. Weitere Informationen zum Angeben verschiedener Attributtypen in einem Ausdruck finden Sie unter Verweisen auf Elementattribute bei der Verwendung von Ausdrücken in DynamoDB.

Überprüfen der Attribute in einem Element

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

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

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

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

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"} }