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

DynamoDB 中的查询操作的键条件表达式

您可以在键条件表达式中使用任意属性名称,前提是第一个字符是 a-zA-Z,其余字符(从第二个字符开始,如果存在)为 a-zA-Z0-9。此外,属性名称不得为 DynamoDB 保留字。(有关这些保留关键字的完整列表,请参阅DynamoDB 中的保留字。) 如果属性名称不满足这些要求,则您必须将表达式属性名称定义为占位符。有关更多信息,请参阅 DynamoDB 中的表达式属性名称(别名)

对于具有给定分区键值的项目,DynamoDB 会将这些项目存储在紧邻位置并按照排序键值对其进行排序。在 Query 操作中,DynamoDB 按照排序顺序检索项目,然后使用 KeyConditionExpression 和可能存在的任何 FilterExpression 处理项目。只有在此时才会将 Query 结果发送回客户端。

Query 操作始终返回结果集。如果未找到匹配的项目,结果集将为空。

Query 结果始终按排序键值排序。如果排序键的数据类型为 Number,则按照数值顺序返回结果。否则,按照 UTF-8 字节的顺序返回结果。默认情况下,系统按升序排序。要颠倒顺序,请将 ScanIndexForward 参数设置为 false

单个 Query 操作最多可检索 1 MB 的数据。在向结果应用任何 FilterExpressionProjectionExpression 之前,将应用此限制。如果 LastEvaluatedKey 包含在响应中且为非 null 值,则您必须为结果集分页(请参阅在 DynamoDB 中对表查询结果分页)。

键条件表达式示例

要指定搜索条件,请使用键条件表达式—用于确定要从表或索引中读取的项目的字符串。

您必须指定分区键名称和值作为等式条件。无法在键条件表达式中使用非键属性。

您可选择为排序键提供另一个条件(如果有)。排序键条件必须使用下列比较运算符之一:

  • a = b — 如果属性 a 等于值 b,则为 true

  • a < b — 如果 a 小于 b,则为 true

  • a <= b — 如果 a 小于等于 b,则为 true

  • a > b — 如果 a 大于 b,则为 true

  • a >= b — 如果 a 大于等于 b,则为 true

  • a BETWEEN b AND c — 如果 a 大于或等于 b,且小于或等于 c,则为 true。

以下函数也受支持:

  • begins_with (a, substr) — 如果属性 a 的值以特定子字符串开头,则为 true。

以下 Amazon Command Line Interface (Amazon CLI) 示例将演示键条件表达式的用法。这些表达式使用占位符(例如 :name:sub)而不是实际的值。有关更多信息,请参阅DynamoDB 中的表达式属性名称(别名)在 DynamoDB 中使用表达式属性值

Thread 表中查询特定的 ForumName(分区键)。具有 ForumName 值的所有项目将由查询进行读取,因为排序键 (Subject) 未包括在 KeyConditionExpression 中。

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name" \ --expression-attribute-values '{":name":{"S":"Amazon DynamoDB"}}'

Thread 表中查询特定的 ForumName(分区键),但这一次仅返回具有给定 Subject(排序键)的项目。

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name and Subject = :sub" \ --expression-attribute-values file://values.json

--expression-attribute-values 的参数存储在 values.json 文件中。

{ ":name":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"} }

Reply 表中查询特定的 Id(分区键),但仅返回其 ReplyDateTime(排序键)以特定字符开头的项目。

aws dynamodb query \ --table-name Reply \ --key-condition-expression "Id = :id and begins_with(ReplyDateTime, :dt)" \ --expression-attribute-values file://values.json

--expression-attribute-values 的参数存储在 values.json 文件中。

{ ":id":{"S":"Amazon DynamoDB#DynamoDB Thread 1"}, ":dt":{"S":"2015-09"} }