

# QueryFilter（遗留）
<a name="LegacyConditionalParameters.QueryFilter"></a>

**注意**  
我们建议您尽可能使用新的表达式参数，而不是这些旧式参数。有关更多信息，请参阅 [在 DynamoDB 中使用表达式](Expressions.md)。有关取代此参数的新参数的具体信息，请参阅[改用 *FilterExpression*。](#FilterExpression.instead)。

在 `Query` 操作中，遗留条件参数 `QueryFilter` 是读取项目后计算查询结果的条件，仅返回所需值。

此参数不支持 List 或 Map 类型的属性。

**注意**  
读取项目后应用 `QueryFilter`；筛选过程不消耗任何额外的读取容量单位。

如果在 `QueryFilter` 映射中提供多个条件，则默认所有条件的计算结果都必须为 true。换句话说，即使用 `AND` 操作符组合这些条件。（可以使用 [ConditionalOperator（遗留）](LegacyConditionalParameters.ConditionalOperator.md) 参数设置为 OR 条件。如果这样做，则必须至少有一个条件的计算结果为 true，而不是所有条件都必须。）

请注意，`QueryFilter` 不允许键属性。不能在分区键或排序键上定义筛选条件。

每个 `QueryFilter` 元素包含要比较的属性名称以及以下内容：
+  `AttributeValueList` - 对提供的属性计算的一个或多个值。列表中的值数量取决于 `ComparisonOperator` 中指定的运算符。

  对于 Number 类型，值比较为数字。

  大于、等于或小于的字符串值比较基于 UTF-8 二进制编码。例如，`a` 大于 `A`，`a` 大于 `B`。

  对于 Binary 类型，DynamoDB 比较二进制值时将二进制数据的每个字节视为无符号。

  有关在 JSON 中指定数据类型的信息，请参见 [DynamoDB 低级 API](Programming.LowLevelAPI.md)。
+  `ComparisonOperator` - 用于计算属性的比较运算符。例如：等于、大于、小于等。

  支持下列比较运算符：

   `EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL | CONTAINS | NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN` 

## 改用 *FilterExpression*– 示例
<a name="FilterExpression.instead"></a>

假设要查询 *Music* 表，并对匹配项目应用条件。可以使用 `Query` 请求和 `QueryFilter` 参数，如这个 AWS CLI 示例：

```
aws dynamodb query \
    --table-name Music \
    --key-conditions '{
        "Artist": {
            "ComparisonOperator": "EQ",
            "AttributeValueList": [ {"S": "No One You Know"} ]
        }   
    }' \
    --query-filter '{
        "Price": {
            "ComparisonOperator": "GT",
            "AttributeValueList": [ {"N": "1.00"} ]
        }   
    }'
```

您可以改用 `FilterExpression`：

```
aws dynamodb query \
    --table-name Music \
    --key-condition-expression 'Artist = :a' \
    --filter-expression 'Price > :p' \
    --expression-attribute-values '{
        ":p": {"N":"1.00"}, 
        ":a": {"S":"No One You Know"}
    }'
```