

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# KeyConditions (舊版)
<a name="LegacyConditionalParameters.KeyConditions"></a>

**注意**  
我們建議您盡可能使用新的表達式參數，而不要使用舊版參數。如需詳細資訊，請參閱[在 DynamoDB 中使用表達式](Expressions.md)。如需取代此參數之新參數的特定資訊，請參閱 [改用 *KeyConditionExpression*。](#KeyConditionExpression.instead)。

舊版條件式參數 `KeyConditions` 包含 `Query` 操作的選取條件。對於資料表上的查詢，您可以僅對資料表主索引鍵屬性設定條件。您必須將分割區索引鍵名稱和值提供為 `EQ` 條件。您可選擇性地提供指向排序索引鍵的第二個條件。

**注意**  
如未提供排序索引鍵條件，則會擷取所有符合分割區索引鍵的項目。如果 `FilterExpression` 或 `QueryFilter` 存在，則會在擷取項目後套用。

對於索引上的查詢，您可以僅對索引鍵屬性設定條件。您必須將索引分割區索引鍵名稱和值提供為 `EQ` 條件。您可選擇提供指向索引排序索引鍵的第二個條件。

每個 `KeyConditions` 元素包含要比較的屬性名稱，並具有下列資訊：
+  `AttributeValueList`：針對所提供的屬性進行評估的一或多個數值。清單中值的數目依使用的 `ComparisonOperator` 而定。

  Number 類型的數值比較為數字。

  大於、等於或小於的 String 數值比較是根據 UTF-8 二進位編碼的 Unicode。例如，`a` 大於 `A`，`a` 大於 `B`。

  針對 Binary，每當 DynamoDB 比較二進位值時，都會將二進位資料的每個位元組視為不帶正負號。
+  `ComparisonOperator`：用於評估屬性的比較程式。例如：等於、大於和小於。

  針對 `KeyConditions`，只支援下列比較運算子：

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

  以下是這些比較運算子的描述。
  +  `EQ`：等於。

     `AttributeValueList` 僅可包含 String、Number 或 Binary 類型 (非集合類型) 的一個 `AttributeValue`。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不等於 `{"N":"6"}`。另外，`{"N":"6"}` 不等於 `{"NS":["6", "2", "1"]}`。
  +  `LE`：小於或等於。

     `AttributeValueList` 僅可包含 String、Number 或 Binary 類型 (非集合類型) 的一個 `AttributeValue` 元素。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不等於 `{"N":"6"}`。另外，`{"N":"6"}` 不與 `{"NS":["6", "2", "1"]}` 比較。
  +  `LT`：小於。

     `AttributeValueList` 僅可包含 String、Number 或 Binary 類型 (非集合類型) 的一個 `AttributeValue`。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不等於 `{"N":"6"}`。另外，`{"N":"6"}` 不與 `{"NS":["6", "2", "1"]}` 比較。
  +  `GE`：大於或等於。

     `AttributeValueList` 僅可包含 String、Number 或 Binary 類型 (非集合類型) 的一個 `AttributeValue` 元素。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不等於 `{"N":"6"}`。另外，`{"N":"6"}` 不與 `{"NS":["6", "2", "1"]}` 比較。
  +  `GT`：大於。

     `AttributeValueList` 僅可包含 String、Number 或 Binary 類型 (非集合類型) 的一個 `AttributeValue` 元素。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不等於 `{"N":"6"}`。另外，`{"N":"6"}` 不與 `{"NS":["6", "2", "1"]}` 比較。
  +  `BEGINS_WITH`：檢查字首。

     `AttributeValueList` 僅可包含 String 或 Binary 類型 (非 Number 或集合類型) 的一個 `AttributeValue`。比較的目標屬性必須是 String 或 Binary 類型 (非 Number 或集合類型)。
  +  `BETWEEN`：大於或等於第一個數值，並且小於或等於第二個數值。

     `AttributeValueList` 必須包含 String、Number 或 Binary 類型 (非集合類型) 的兩個 `AttributeValue` 元素。如果目標數值大於或等於第一個元素，並且小於或等於第二個元素，則目標屬性相符。如果項目內含的 `AttributeValue` 元素所屬類型與請求中提供的類型不同，則數值不相符。例如，`{"S":"6"}` 不與 `{"N":"6"}` 比較。另外，`{"N":"6"}` 不與 `{"NS":["6", "2", "1"]}` 比較。

## 改用 *KeyConditionExpression* - 範例
<a name="KeyConditionExpression.instead"></a>

假設您想從 *Music* 資料表擷取數個具有相同分割區索引鍵的項目。您可以搭配 `KeyConditions` 參數使用`Query`請求，如本 AWS CLI 範例所示：

```
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"}
    }'
```