DynamoDB の条件式とフィルター式、演算子、関数 - Amazon DynamoDB

DynamoDB の条件式とフィルター式、演算子、関数

Amazon DynamoDB テーブルのデータを操作するには、PutItemUpdateItemDeleteItem の各オペレーションを使用します。これらのデータ操作オペレーションでは、どの項目を修正する必要があるかを判断するために、条件式を指定できます。条件式が true と評価される場合、オペレーションは成功します。それ以外の場合は、このオペレーションは失敗します。

このセクションでは、Amazon DynamoDB の書き込みフィルター式と条件式の組み込み関数およびキーワードについて説明します。DynamoDB で使用する関数とプログラミングの詳細については、「DynamoDB と AWS SDK を使用したプログラミング」と「DynamoDB API リファレンス」を参照してください。

フィルター式と条件式の構文

以下の構文の概要で、operand は次のいずれかです。

  • 最上位の属性名 (IdTitleDescriptionProductCategory など)

  • 入れ子の属性を参照するドキュメントパス

condition-expression ::= operand comparator operand | operand BETWEEN operand AND operand | operand IN ( operand (',' operand (, ...) )) | function | condition AND condition | condition OR condition | NOT condition | ( condition ) comparator ::= = | <> | < | <= | > | >= function ::= attribute_exists (path) | attribute_not_exists (path) | attribute_type (path, type) | begins_with (path, substr) | contains (path, operand) | size (path)

比較の実行

これらのコンパレータを使用して、オペランドを単一の値と比較します。

  • a = bab と等しい場合、True

  • a <> bab と等しくない場合、True

  • a < bab 未満の場合、True

  • a <= bab 以下である場合、True

  • a > bab より大きい場合、True

  • a >= bab 以上である場合、True

値の範囲または値の列挙リストに対してオペランドを比較するには、BETWEEN および IN キーワードを使用します。

  • a BETWEEN b AND c - ab 以上で、c 以下である場合、True。

  • a IN (b, c, d) a がリスト内の任意の値と等しい場合、True。例では、bcd のいずれかと等しい場合。リストには、コンマで区切って最大 100 個の値を指定できます。

関数

以下の関数を使用して、ある属性が項目に存在するか判定したり、属性の値を評価したりします。これらの関数名では大文字と小文字が区別されます。入れ子の属性では、完全ドキュメントパスを指定する必要があります。

関数 説明

attribute_exists (path)

項目に、path で指定した属性が含まれる場合、true。

例: Product テーブルの項目に側面図があるかどうかを確認します。

  • attribute_exists (#Pictures.#SideView)

attribute_not_exists (path)

path で指定した属性が項目に存在しない場合、true。

例: 項目に Manufacturer 属性があるかどうかを確認します。

  • attribute_not_exists (Manufacturer)

attribute_type (path, type)

指定したパスの属性が、特定のデータ型のものである場合、true。type パラメータは次のいずれかである必要があります。

  • S — 文字列

  • SS — 文字列セット

  • N — 数値

  • NS — 数値セット

  • B — バイナリ

  • BS — バイナリセット

  • BOOL — ブール

  • NULL — Null

  • L — リスト

  • M — マップ

type パラメータには、式の属性値を使用する必要があります。

例: QuantityOnHand 属性がリスト型のものであるかどうかを確認します。この例では、:v_sub は文字列 L のプレースホルダーです。

  • attribute_type (ProductReviews.FiveStar, :v_sub)

type パラメータには、式の属性値を使用する必要があります。

begins_with (path, substr)

path で指定された属性が特定のサブ文字列から始まる場合、true。

例: 正面図 URL の最初の数文字が http:// かどうかを確認します。

  • begins_with (Pictures.FrontView, :v_sub)

式の属性値 :v_sub は、http:// のプレースホルダーです。

contains (path, operand)

path で指定された属性が次の属性である場合、true。

  • 特定のサブ文字列を含む String

  • 設定の中に特定の要素を含む Set

  • リスト内に特定の要素を含む List

path で指定された属性が String である場合、operandString である必要があります。path で指定された属性が Set の場合、operand は一連の要素タイプである必要があります。

パスとオペランドは区別する必要があります。つまり、contains (a, a) がエラーを返します。

例: Brand 属性にサブ文字列 Company が含まれているかどうかを確認します。

  • contains (Brand, :v_sub)

式の属性値 :v_sub は、Company のプレースホルダーです。

例: 製品が赤で入手可能かどうかを確認します。

  • contains (Color, :v_sub)

式の属性値 :v_sub は、Red のプレースホルダーです。

size (path)

属性のサイズを表す数値を返します。以下は、size で使用できる有効なデータ型です。

属性は String 型で、size は文字列の長さを返します。

例: 文字列 Brand が 20 文字以下であるかどうかを確認します。式の属性値 :v_sub は、20 のプレースホルダーです。

  • size (Brand) <= :v_sub

属性が Binary バイナリ型の場合、size は属性値のバイト数を返します。

例: ProductCatalog 項目に VideoClip という名前のバイナリ属性があるとします。この属性には使用中の製品の短いビデオが含まれます。次の式は、VideoClip が 64,000 バイトを超えるかどうかを確認します。式の属性値 :v_sub は、64000 のプレースホルダーです。

  • size(VideoClip) > :v_sub

属性が Set データ型の場合、size は設定の要素数を返します。

例: 製品が複数の色で入手可能かどうかを確認します。式の属性値 :v_sub は、1 のプレースホルダーです。

  • size (Color) < :v_sub

属性が List 型または Map のものである場合、size は子要素の数を返します。

例: OneStar のレビューの数が特定のしきい値を超えたかどうかを確認します。式の属性値 :v_sub は、3 のプレースホルダーです。

  • size(ProductReviews.OneStar) > :v_sub

論理評価

論理評価を実行するには、ANDORNOT キーワードを使用します。以下のリストでは、ab は評価される条件を示しています。

  • a AND bab の両方が true である場合、True。

  • a OR ba または b のどちらか (または両方) が true の場合、True。

  • NOT aa が false の場合は True。a が true の場合は Falsee。

以下は、オペレーションの AND のコード例です。

dynamodb-local (*)> select * from exprtest where a > 3 and a < 5;

括弧

論理評価の優先順位を変更するには括弧を使用します。たとえば、条件 ab が true で、条件 c が false であるとします。次の式は true と評価されます。

  • a OR b AND c

しかし、条件を括弧で囲むと、それが最初に評価されます。たとえば、次の式は false と評価されます。

  • (a OR b) AND c

注記

式では括弧を入れ子にできます。最も内側の括弧が最初に評価されます。

以下は、論理評価で括弧を付けたコード例です。

dynamodb-local (*)> select * from exprtest where attribute_type(b, string) or ( a = 5 and c = “coffee”);

条件の優先順位

DynamoDB では、条件は次の優先順位ルールを使用して左から右に評価されます。

  • = <> < <= > >=

  • IN

  • BETWEEN

  • attribute_exists attribute_not_exists begins_with contains

  • 括弧

  • NOT

  • AND

  • OR