メニュー
Amazon DynamoDB
開発者ガイド (API Version 2012-08-10)

条件式を使用した条件付きの書き込みの実行

テーブルの項目を確認するには、QueryScan などの オペレーションを使用します。これらのオペレーションにより、選択条件およびフィルタリングの独自の条件を指定することができます。 DynamoDB は、条件に一致する項目のみを評価して返します。

項目を書き込むには、PutItemUpdateItemDeleteItem などの オペレーションを使用します。これらのオペレーションとともに条件式を使用すると、項目を変更できる方法と条件を管理できます。 項目が事前に一部の条件を満たさない場合、更新が発生しないようにすることができます。たとえば、PutItem が既存の項目を上書きしないようにできます。

注記

このセクションの例は、「導入事例: ProductCatalog 項目」の ProductCatalog 項目に基づいています。

条件式

条件式は、テーブルの項目を読み書きするときに適用する制限を表します。条件式は、属性名、ドキュメントパス、論理演算子、および関数を含むフリーフォームの文字列です。条件式で使用できる要素の一覧については、「条件式リファレンス」を参照してください。

条件式のいくつかの例を次に示します。 これらの式の一部では、属性の名前と値にプレースホルダーが使用されている点に注意してください。詳細については、「属性の名前および値でのプレースホルダーの使用」を参照してください。

  • PutItem が既存の項目を上書きしないようにするには、項目のパーティションキーが存在しないことを指定する条件式を使用します。テーブルのすべての項目にはパーティションキーが必要であるため、これにより、既存の項目が上書きされるのを回避できます。たとえば、パーティションキーの名前が「town」の場合は、次のコードを使用できます。

    attribute_not_exists(town)

    この条件式は PutItem で使用されます。DynamoDB は、書き込む項目のプライマリキーとプライマリキーが一致する項目を最初に探します。結果にパーティションキーが含まれないのは、検索で何も返されない場合のみです。それ以外の場合、上記の attribute_not_exists 関数は失敗し、書き込みは禁止されます。

  • RearView の写真があるすべての項目。

    attribute_exists(Pictures.RearView)

  • 1 つ星の評価がない項目のみ。式の属性名 #pr, は、ProductReviews の置換です。

    attribute_not_exists (#pr.OneStar)

    # 文字の詳細については、「式の属性名」を参照してください。

  • 単純なスカラー比較である :p は数値を表し、:bt は文字列を表します。

    Price <= :p

    BicycleType = :bt

  • 2 つの条件はどちらも true でなければなりません。#P#PC は、Price および ProductCategory 属性名のプレースホルダーです。:lo:hi は、数値型の値を表しており、:cat1:cat2 は文字列型の値を表しています。

    (#P between :lo and :hi) and (#PC in (:cat1, :cat2))

最初の文字が a-z または A-Z であり、残りの文字 (ある場合) が a-zA-Z、または 0-9 である場合は、条件式で任意の属性名を使用できます。属性名がこの要件を満たさない場合は、式の属性名をプレースホルダーとして定義する必要があります。詳細については、「式の属性名」を参照してください。

条件式リファレンス

このセクションでは、DynamoDB の条件式の基本的な構成要素について説明します。

注記

ConditionExpression の構文は FilterExpression パラメータと同じです。FilterExpression はデータのクエリ時とスキャン時に使用されます。詳細については、「クエリまたはスキャンからの結果のフィルタリング」を参照してください。

条件式の構文

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

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

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

Copy
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 = b - ab と等しい場合、true

  • a <> b - ab と等しくない場合、true

  • a < b - ab より小さい場合、true

  • a <= b - ab 以下である場合、true

  • a > b - ab より大きい場合、true

  • a >= b - ab 以上である場合、true

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

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

  • a IN (b, c, d) - a がリスト内の任意の値(例では、bcd のいずれか)と等しい場合、true。リストには、コンマで区切って最大 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 — Boolean

  • NULL — Null

  • L — リスト

  • M — マップ

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

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

  • attribute_type (ProductReviews.FiveStar, :v_sub)

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

begins_with (path, substr)

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

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

  • begins_with (Pictures.FrontView, :v_sub)

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

contains (path, operand)

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

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

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

いずれの場合でも、operand は文字列である必要があります。

パスとオペランドは異なっている必要があります。つまり contains (a, a) はエラーを返します。

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

  • contains (Brand, :v_sub)

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

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

  • contains (Color, :v_sub)

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

size (path)

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

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

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

  • size (Brand) <= :v_sub

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

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

  • size(VideoClip) > :v_sub

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

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

  • size (Color) < :v_sub

属性がリスト型またはマップのものである場合、size は子要素の数を返します。

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

  • size(ProductReviews.OneStar) > :v_sub

論理評価

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

  • a AND b - ab の両方が true である場合、true。

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

  • NOT a - a が false の場合、true。a が true の場合、false。

括弧

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

  • a OR b AND c

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

  • (a OR b) AND c

注記

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

条件の優先順位

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

  • = <> < <= > >=

  • IN

  • BETWEEN

  • attribute_exists attribute_not_exists begins_with contains

  • 括弧

  • NOT

  • AND

  • OR

このページの内容: