Schreiben von Bedingungen mit Legacy-Parametern - 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.

Schreiben von Bedingungen mit Legacy-Parametern

Anmerkung

Es wird empfohlen, nach Möglichkeit die neuen Ausdrucksparameter anstelle der alten Parameter zu verwenden. Weitere Informationen finden Sie unter Verwenden von Ausdrücken in DynamoDB.

Im folgenden Abschnitt wird beschrieben, wie Sie Bedingungen für die Verwendung mit Legacy-Parametern, wie Expected, QueryFilter und ScanFilter, schreiben.

Anmerkung

Neue Anwendungen sollten stattdessen Ausdrucksparameter verwenden. Weitere Informationen finden Sie unter Verwenden von Ausdrücken in DynamoDB.

Einfache Bedingungen

Mit Attributwerten können Sie Bedingungen für Vergleiche mit Tabellenattributen erstellen. Eine Bedingung wird immer mit True oder False ausgewertet und besteht aus Folgendem:

  • ComparisonOperator – größer als, kleiner als, gleich usw.

  • AttributeValueList (optional) – Attributwerte für den Vergleich. Abhängig vom verwendeten ComparisonOperator enthält AttributeValueList möglicherweise einen, zwei oder mehr Werte oder ist nicht vorhanden.

In den folgenden Abschnitten werden die verschiedenen Vergleichsoperatoren beschrieben. Außerdem finden Sie einige Beispiele, wie Sie sie in Bedingungen verwenden können.

Vergleichsoperatoren ohne Attributwerte

  • NOT_NULL – True, wenn ein Attribut vorhanden ist.

  • NULL – True, wenn das Attribut nicht vorhanden ist.

Verwenden Sie diese Operatoren, um zu überprüfen, ob ein Attribut vorhanden oder nicht vorhanden ist. Da es keinen Wert gibt, mit dem verglichen werden soll, geben Sie AttributeValueList nicht an.

Beispiel

Der folgende Ausdruck wird mit True ausgewertet, wenn das Attribut Dimensions vorhanden ist.

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

Vergleichsoperatoren mit einem Attributwert

  • EQ – True, wenn ein Attribut gleich einem Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl, Binärwert, Zeichenfolgensatz, Zahlensatz und Binärwertesatz enthalten. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein. Beispielsweise ist die Zeichenfolge "3" nicht gleich der Zahl 3. Die Zahl 3 ist auch nicht gleich dem Zahlensatz [3, 2, 1].

  • NE – True, wenn ein Attribut nicht gleich einem Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl, Binärwert, Zeichenfolgensatz, Zahlensatz und Binärwertesatz enthalten. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

  • LE – True, wenn ein Attribut kleiner als oder gleich einem Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn ein Element einen AttributeValue eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

  • LT – True, wenn ein Attribut kleiner als ein Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

  • GE – True, wenn ein Attribut größer als oder gleich einem Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

  • GT – True, wenn ein Attribut größer als ein Wert ist.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

  • CONTAINS – True, wenn ein Wert in einem Satz vorhanden ist oder wenn ein Wert einen anderen enthält.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn das Zielattribut des Vergleichs eine Zeichenfolge ist, dann prüft der Operator, ob eine Teilzeichenfolge übereinstimmt. Wenn das Zielattribut des Vergleichs vom Typ Binär ist, sucht der Operator nach einer Teilsequenz des Ziels, die mit der Eingabe übereinstimmt. Wenn das Zielattribut des Vergleichs ein Satz ist, dann wertet der Operator mit True aus, wenn er eine genaue Übereinstimmung mit einem beliebigen Mitglied des Satzes findet.

  • NOT_CONTAINS – True, wenn ein Wert in einem Satz nicht vorhanden ist oder wenn ein Wert keinen anderen enthält.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Wenn das Zielattribut des Vergleichs eine Zeichenfolge ist, dann prüft der Operator auf eine fehlende Übereinstimmung einer Teilzeichenfolge. Wenn das Zielattribut des Vergleichs vom Typ Binärwert ist, prüft der Operator, ob eine Teilsequenz des Ziels, die mit der Eingabe übereinstimmt, fehlt. Wenn das Zielattribut des Vergleichs ein Satz ist, dann wertet der Operator mit True aus, wenn er keine genaue Übereinstimmung mit einem beliebigen Mitglied des Satzes findet.

  • BEGINS_WITH – True, wenn die ersten Zeichen eines Attributs mit dem angegebenen Wert übereinstimmen. Verwenden Sie diesen Operator nicht für den Vergleich von Zahlen.

    AttributeValueList kann nur einen Wert vom Typ Zeichenfolge oder Binärwert (keine Zahl oder Satz) enthalten. Das Zielattribut des Vergleichs muss vom Typ Zeichenfolge oder Binärzahl sein (keine Zahl bzw. kein Satz).

Verwenden Sie diese Operatoren, um ein Attribut mit einem Wert zu vergleichen. Sie müssen eine AttributeValueList angeben, die aus einem einzigen Wert besteht. Für die meisten Operatoren muss dieser Wert ein Skalarwert sein. Die Operatoren EQ und NE unterstützen jedoch auch Sätze.

Beispiele

Die folgenden Ausdrücke werden mit True ausgewertet, wenn:

  • der Produktpreis größer als 100 ist.

    ... "Price": { ComparisonOperator: "GT", AttributeValueList: [ {"N":"100"} ] } ...
  • eine Produktkategorie mit „Bo“ beginnt.

    ... "ProductCategory": { ComparisonOperator: "BEGINS_WITH", AttributeValueList: [ {"S":"Bo"} ] } ...
  • ein Produkt entweder in Rot, Grün oder Schwarz erhältlich ist:

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

    Beim Vergleichen von Satzdatentypen ist die Reihenfolge der Elemente unerheblich. DynamoDB sendet nur die Elemente mit demselben Wertesatz, unabhängig von der Reihenfolge, in der Sie sie in Ihrer Anforderung angeben.

Vergleichsoperatoren mit zwei Attributwerten

  • BETWEEN – True, wenn ein Wert zwischen einer unteren und einer oberen Grenze liegt, Endpunkte eingeschlossen.

    AttributeValueList muss zwei Elemente desselben Typs enthalten, und zwar Zeichenfolge, Zahl oder Binärwert (kein Satztyp). Es kommt zu einer Übereinstimmung mit dem Zielattribut, wenn der Zielwert größer als oder gleich dem ersten Element und kleiner als oder gleich dem zweiten Element ist. Wenn ein Element einen Wert eines anderen Typs enthält, als in der Anforderung angegeben, stimmt der Wert nicht überein.

Verwenden Sie diesen Operator, um zu bestimmen, ob ein Attributwert innerhalb eines Bereichs liegt. Die AttributeValueList muss zwei skalare Elemente desselben Typs enthalten, und zwar Zeichenfolge, Zahl oder Binärwert.

Beispiel

Der folgende Ausdruck wird mit True ausgewertet, wenn ein Produktpreis zwischen 100 und 200 liegt.

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

Vergleichsoperatoren mit n Attributwerten

  • IN – True, wenn ein Wert gleich einem der Werte in einer Aufzählung ist. Es werden nur skalare Werte und keine Sätze in der Liste unterstützt. Das Zielattribut muss vom selben Typ sein und mit dem genauen Wert übereinstimmen.

    AttributeValueList kann nur ein oder mehrere Elemente vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Diese Attribute werden mit einem vorhandenen Nicht-Satztypattribut eines Elements verglichen. Wenn ein beliebiges Element des Eingabesatzes im Elementattribut vorhanden ist, wird der Ausdruck mit True ausgewertet.

    AttributeValueList kann nur ein oder mehrere Werte vom Typ Zeichenfolge, Zahl oder Binärwert (kein Satztyp) enthalten. Das Zielattribut des Vergleichs muss vom selben Typ sein und mit dem genauen Wert übereinstimmen. Eine Zeichenfolge stimmt niemals mit einem Zeichenfolgensatz überein.

Verwenden Sie diesen Operator, um zu ermitteln, ob sich der angegebene Wert innerhalb einer Aufzählung befindet. Sie können eine beliebige Anzahl von Skalarwerten in AttributeValueList angeben, diese müssen allerdings denselben Datentyp aufweisen.

Beispiel

Der folgende Ausdruck wird mit True ausgewertet, wenn der Wert für ID 201, 203 oder 205 ist.

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

Verwenden mehrerer Bedingungen

Mit DynamoDB können Sie mehrere Bedingungen zu komplexen Ausdrücken kombinieren. Dazu geben Sie mindestens zwei Ausdrücke mit einem optionalen ConditionalOperator (Vermächtnis) an.

Wenn Sie mehr als eine Bedingung angeben, müssen alle Bedingungen mit True ausgewertet werden, damit der gesamte Ausdruck mit True ausgewertet wird. Mit anderen Worten, es findet eine implizite ANDOperation statt.

Beispiel

Der folgende Ausdruck wird mit True ausgewertet, wenn ein Produkt ein Buch mit mindestens 600 Seiten ist. Beide Bedingungen müssen als wahr bewertet werden, da sie implizit zusammen auftreten AND.

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

Sie können ConditionalOperator (Vermächtnis) damit klarstellen, dass eine ANDOperation stattfinden wird. Das folgende Beispiel verhält sich ähnlich wie das vorherige.

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

Sie können ConditionalOperator auch auf OR festlegen, was bedeutet, dass mindestens eine der Bedingungen mit True ausgewertet werden muss.

Beispiel

Der folgende Ausdruck wird mit True ausgewertet, wenn ein Produkt eine Mountainbike ist, wenn es eine bestimmte Marke ist oder wenn der Preis größer als 100 ist.

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

In einem komplexen Ausdruck werden die Bedingungen der Reihe nach verarbeitet, angefangen von der ersten bis zur letzten Bedingung.

Sie können nicht AND sowohl als auch OR in einem einzigen Ausdruck verwenden.

Andere Bedingungsoperatoren

In früheren Versionen von DynamoDB verhielt sich der Parameter Expected für bedingte Schreibvorgänge anders. Jedes Element im Expected-Mapping stellte einen Attributnamen dar, den DynamoDB zusammen mit Folgendem prüfen sollte:

  • Value – ein Wert für den Vergleich mit dem Attribut.

  • Exists – bestimmt, ob der Wert vorhanden ist, bevor die Operation ausgeführt wird.

Die Optionen Value und Exists werden weiterhin in DynamoDB unterstützt. Sie ermöglichen allerdings nur eine Prüfung auf eine Gleichheitsbedingung oder darauf, ob ein Attribut vorhanden ist. Es wird empfohlen, stattdessen ComparisonOperator und AttributeValueList zu verwenden, da Sie mit diesen Optionen einen umfassenderen Bereich von Bedingungen erstellen können.

Beispiel

Ein DeleteItem kann prüfen, ob ein Buch nicht mehr veröffentlicht wird, und es nur löschen, wenn die Bedingung erfüllt ist. Hier finden Sie ein AWS CLI -Beispiel mit einer Legacy-Bedingung:

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

Im folgenden Beispiel werden dieselben Aktionen ausgeführt, allerdings ohne Legacy-Bedingung:

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

Eine PutItem-Operation kann ein vorhandenes Element mit denselben Primärschlüsselattributen vor dem Überschreiben schützen. Hier finden Sie ein -Beispiel mit einer Legacy-Bedingung:

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

Im folgenden Beispiel werden dieselben Aktionen ausgeführt, allerdings ohne Legacy-Bedingung:

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

Verwenden Sie für Bedingungen im Expected-Mapping die Legacy-Optionen Value und Exists nicht gemeinsam mit ComparisonOperator und AttributeValueList. Andernfalls tritt beim bedingten Schreibvorgang ein Fehler auf.