DynamoDB 中的查询操作的键条件表达式
您可以在键条件表达式中使用任意属性名称,前提是第一个字符是 a-z
或 A-Z
,其余字符(从第二个字符开始,如果存在)为 a-z
、A-Z
或 0-9
。此外,属性名称不得为 DynamoDB 保留字。(有关这些保留关键字的完整列表,请参阅DynamoDB 中的保留字。) 如果属性名称不满足这些要求,则您必须将表达式属性名称定义为占位符。有关更多信息,请参阅 DynamoDB 中的表达式属性名称(别名)。
对于具有给定分区键值的项目,DynamoDB 会将这些项目存储在紧邻位置并按照排序键值对其进行排序。在 Query
操作中,DynamoDB 按照排序顺序检索项目,然后使用 KeyConditionExpression
和可能存在的任何 FilterExpression
处理项目。只有在此时才会将 Query
结果发送回客户端。
Query
操作始终返回结果集。如果未找到匹配的项目,结果集将为空。
Query
结果始终按排序键值排序。如果排序键的数据类型为 Number
,则按照数值顺序返回结果。否则,按照 UTF-8 字节的顺序返回结果。默认情况下,系统按升序排序。要颠倒顺序,请将 ScanIndexForward
参数设置为 false
。
单个 Query
操作最多可检索 1 MB 的数据。在向结果应用任何 FilterExpression
或 ProjectionExpression
之前,将应用此限制。如果 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
BETWEENb
ANDc
a
大于或等于b
,且小于或等于c
,则为 true。
以下函数也受支持:
-
begins_with (
— 如果属性a
,substr
)
的值以特定子字符串开头,则为 true。a
以下 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"} }