KeyConditions(旧式) - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

KeyConditions(旧式)

注意

我们建议您尽可能使用新的表达式参数,而不是这些旧式参数。有关更多信息,请参阅在 DynamoDB 中使用表达式。有关取代此参数的新参数的具体信息,请参阅改用 KeyConditionExpression。

旧式条件参数 KeyConditions 包含 Query 操作的选择标准。对于表的查询,只能对表主键属性设置条件。必须提供分区键名称和值作为 EQ 条件。可以选择提供排序键作为另一个条件。

注意

如果不提供排序键条件,则将检索与分区键匹配的所有项目。如果存在 FilterExpressionQueryFilter,将在检索项目后应用。

对于索引查询,只能对索引键属性设置条件。必须提供索引键名称和值作为 EQ 条件。可以选择提供索引排序键作为另一个条件。

每个 KeyConditions 元素包含要比较的属性名称以及以下内容:

  • AttributeValueList - 对提供的属性计算的一个或多个值。列表中的值取决于使用的 ComparisonOperator

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

    大于、等于或小于的字符串值比较基于 UTF-8 二进制编码的 Unicode。例如,a 大于 Aa 大于 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 必须包含两个相同类型的 AttributeValue 元素,可以是 String、Number 或 Binary(不是集合类型)。如果目标值大于等于第一个元素,小于等于第二个元素,则目标属性匹配。如果项目包含的 AttributeValue 元素类型与请求提供的类型不同,则值不匹配。例如,{"S":"6"} 不等于 {"N":"6"}。同样,{"N":"6"} 不等于 {"NS":["6", "2", "1"]}

改用 KeyConditionExpression– 示例

假设要用相同分区键从 Music 表检索多个项目。可以使用 Query 请求和 KeyConditions 参数,如这个 Amazon 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"} }'