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

KeyConditions

KeyConditionsQuery 操作的选择条件。对于表的查询,只能对表主键属性设置条件。必须提供分区键名称和值作为 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"} }'