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

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

KeyConditions

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

注意

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

对于针对索引的查询,您只能具有索引键属性的条件。您必须提供索引分区键名称和值作为 EQ 条件。您可以选择提供另一个条件,请参考索引排序键。

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

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

    对于类型数字,值比较是数字比较。

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

    对于二进制文件,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 的 AttributeValue (不是数字或集合类型)。比较的目标属性必须是字符串或二进制类型 (不是数字或集合类型)。

    • BETWEEN: 大于或等于第一个值,小于或等于第二个值。

      AttributeValueList 必须包含两个相同类型的 AttributeValue 元素:String、Number 或 Binary(不是集合类型)。如果目标值大于或等于第一个元素且小于或等于第二个元素,则目标属性匹配。如果项目包含的类型与请求中提供的元素不同的 AttributeValue 元素,则值不匹配。例如,{"S":"6"} 不与 {"N":"6"} 进行比较。 此外,{"N":"6"} 不与 {"NS":["6", "2", "1"]} 进行比较

使用 KeyConditionExpression 而不是

假设您要检索 Music 表中具有相同分区键的多个项目。您可以将 Query 请求与 KeyConditions 参数结合使用,如以下 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"} }'