Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

KeyConditions

KeyConditionsQuery 操作的选择条件。对于表查询,您只能为表主键属性设置条件。您必须提供分区键名称和值作为 EQ 条件。对于排序键,您可选择提供另一个条件。

注意

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

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

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

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

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

    大于、等于或小于的字符串值比较基于带 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

假设您要从 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"} }'