KeyConditions - Amazon DynamoDB

KeyConditions

注記

式パラメータの導入により、いくつかの古いパラメータが非推奨になりました。新しいアプリケーションでは、これらのレガシーパラメータではなく、式パラメータを使用することが推奨されます。詳細については、「DynamoDB での式の使用」を参照してください。

KeyConditions は、Query オペレーションの選択条件です。テーブルに対するクエリでは、テーブルのプライマリキー属性に対してのみ条件を設定できます。EQ 条件としてパーティションキーの名前と値を指定する必要があります。ソートキーを参照する 2 番目の条件を指定できます (オプション)。

注記

ソートキー条件を指定しない場合、パーティションキーに一致するすべての項目が取得されます。FilterExpression または QueryFilter が存在する場合、これは項目が取得された後に適用されます。

インデックスに対するクエリでは、インデックスキー属性に対してのみ条件を設定できます。EQ 条件としてインデックスパーティションキーの名前と値を指定する必要があります。インデックスソートキーを参照する 2 番目の条件を指定できます (オプション)。

KeyConditions 要素は、比較する属性名と次の属性で構成されます。

  • AttributeValueList - 指定された属性に対して評価する 1 つ以上の値。リストの値の数は、使用される ComparisonOperator エンジンによって異なります。

    数値型の場合、値の比較は数値です。

    より大きい、等しい、またはより小さいの文字列値の比較は、UTF-8 バイナリエンコーディングの Unicode に基づきます。例えば、aA より大きく、aB より大きいと評価されます。

    バイナリの場合、DynamoDB がバイナリ値を比較する際、バイナリデータの各バイトは符号なしとして扱われます。

  • ComparisonOperator - 属性を評価するためのコンパレータ (等しい、より大きい、より小さい、より小さいなど)。

    KeyConditions の場合、次の比較演算子がサポートされています。

    EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN

    これらの比較演算子の説明を次に示します。

    • EQ: 等しい。

      AttributeValueList には、文字列、数値、またはバイナリの型 (セット型ではありません) の 1 つの AttributeValue のみ含めることができます。リクエストで指定されているもの以外の型の AttributeValue 要素が項目に含まれる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と等しくありません。また、{"N":"6"}{"NS":["6", "2", "1"]} と等しくありません。

    • LE: より小さい、または等しい。

      AttributeValueList には、文字列、数値、またはバイナリの型 (セット型ではありません) の 1 つの AttributeValue 要素のみ含めることができます。項目に含まれる AttributeValue 要素の型がリクエストで指定されている型と異なる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と等しくありません。また、{"N":"6"}{"NS":["6", "2", "1"]} と比較されません。

    • LT: より小さい。

      AttributeValueList には、文字列、数値、またはバイナリの型 (セット型ではありません) の 1 つの AttributeValue のみ含めることができます。項目に含まれる AttributeValue 要素の型がリクエストで指定されている型と異なる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と等しくありません。また、{"N":"6"}{"NS":["6", "2", "1"]} と比較されません。

    • GE: より大きい、または等しい。

      AttributeValueList には、文字列、数値、またはバイナリの型 (セット型ではありません) の 1 つの AttributeValue 要素のみ含めることができます。項目に含まれる AttributeValue 要素の型がリクエストで指定されている型と異なる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と等しくありません。また、{"N":"6"}{"NS":["6", "2", "1"]} と比較されません。

    • GT: より大きい。

      AttributeValueList には、文字列、数値、またはバイナリの型 (セット型ではありません) の 1 つの AttributeValue 要素のみ含めることができます。項目に含まれる AttributeValue 要素の型がリクエストで指定されている型と異なる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と等しくありません。また、{"N":"6"}{"NS":["6", "2", "1"]} と比較されません。

    • BEGINS_WITH: プレフィックスを確認します。

      AttributeValueList には、文字列またはバイナリ型の 1 つの AttributeValue のみを含めることができます (数値やセットではありません)。比較のターゲット属性は、文字列型またはバイナリ型である必要があります (数値型またはセット型ではありません)。

    • BETWEEN: 最初の値よりも大きいか等しく、2 番目の値よりも小さいか等しくなります。

      AttributeValueList には、文字列、数値、またはバイナリ (セットではありません) のいずれかの同じ型の 2 つの AttributeValue 要素を含む必要があります。ターゲット属性は、ターゲット値が最初の要素より大きいか等しく、2番目の要素より小さいか等しい場合に一致します。項目に含まれる AttributeValue 要素の型がリクエストで指定されている型と異なる場合、値は一致しません。例えば、{"S":"6"}{"N":"6"} と比較されません。また、{"N":"6"}{"NS":["6", "2", "1"]} と比較されません。

代わりに KeyConditionExpression を使用

同じパーティションキーを持つ複数の項目を Music テーブルから取得する場合を考えてみます。次の AWS CLI の例に示すように、Query パラメータを含む KeyConditions リクエストを使用できます。

aws dynamodb query \ --table-name Music \ --key-conditions '{ "Artist":{ "ComparisonOperator":"EQ", "AttributeValueList": [ {"S": "No One You Know"} ] }, "SongTitle":{ "ComparisonOperator":"BETWEEN", "AttributeValueList": [ {"S": "A"}, {"S": "M"} ] } }'

しかし、代わりに KeyConditionExpression を使用することができます。

aws dynamodb query \ --table-name Music \ --key-condition-expression 'Artist = :a AND SongTitle BETWEEN :t1 AND :t2' \ --expression-attribute-values '{ ":a": {"S": "No One You Know"}, ":t1": {"S": "A"}, ":t2": {"S": "M"} }'