

# KeyConditions (レガシー)
<a name="LegacyConditionalParameters.KeyConditions"></a>

**注記**  
可能な限り、これらのレガシーパラメータの代わりに新しい式パラメータを使用することをお勧めします。詳細については、「[DynamoDB での式の使用](Expressions.md)」を参照してください。このパラメータに代わる新しいパラメータの具体的な情報については、「[代わりに *KeyConditionExpression* を使用します。](#KeyConditionExpression.instead)」を参照してください。

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

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

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

各 `KeyConditions` 要素は、比較する属性名と次の属性で構成されます。
+  `AttributeValueList` - 指定された属性に対して評価する 1 つ以上の値。リストの値の数は、使用される `ComparisonOperator` エンジンによって異なります。

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

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

  バイナリの場合、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* を使用 - 例
<a name="KeyConditionExpression.instead"></a>

同じパーティションキーを持つ複数の項目を *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"}
    }'
```