DynamoDB 中的查询操作的筛选表达式
如果您需要进一步细化 Query
结果,则可以选择性地提供筛选表达式。筛选表达式可确定 Query
结果中应返回给您的项目。所有其他结果将会丢弃。
筛选表达式在 Query
已完成但结果尚未返回时应用。因此,无论是否存在筛选表达式,Query
都将占用同等数量的读取容量。
Query
操作最多可检索 1 MB 的数据。此限制在计算筛选表达式之前应用。
筛选表达式不得包含分区键或排序键属性。您需要在关键字条件表达式而不是筛选表达式中指定这些属性。
筛选表达式的语法与关键条件表达式的语法相似。筛选表达式可使用的比较运算符、函数和逻辑运算符与关键条件表达式可使用的相同。此外,筛选表达式可以使用不等于运算符 (<>
)、OR
运算符、CONTAINS
运算符、IN
运算符、BEGINS_WITH
运算符、BETWEEN
运算符、EXISTS
运算符和 SIZE
运算符。有关更多信息,请参阅DynamoDB 中的查询操作的键条件表达式 和筛选条件和条件表达式的语法。
例
以下 Amazon CLI 示例在 Thread
表中查询特定 ForumName
(分区键)和 Subject
(排序键)。在找到的项目中,只返回最常用的讨论线程,换句话说,只有那些具有超过一定数量 Views
的线程。
aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :fn and Subject = :sub" \ --filter-expression "#v >= :num" \ --expression-attribute-names '{"#v": "Views"}' \ --expression-attribute-values file://values.json
--expression-attribute-values
的参数存储在 values.json
文件中。
{ ":fn":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"}, ":num":{"N":"3"} }
请注意,Views
在 DynamoDB 中是一个保留字(请参阅 DynamoDB 中的保留字),因此本示例使用 #v
作为占位符。有关更多信息,请参阅 DynamoDB 中的表达式属性名称(别名)。
注意
筛选表达式将从 Query
结果集中删除项目。在您预计会检索到大量项目并且还需要丢弃其中大多数项目的情况下,请尽量避免使用 Query
。