扫描
通过使用 Scan
请求,您可以指示 AWS AppSync DynamoDB 函数向 DynamoDB 发出 Scan
请求,并允许您指定以下内容:
-
排除结果的筛选条件
-
要使用的索引
-
要返回多少个项目
-
是否使用一致性读取
-
分页标记
-
并行扫描
Scan
请求对象具有以下结构:
type DynamoDBScanRequest = { operation: 'Scan'; index?: string; limit?: number; consistentRead?: boolean; nextToken?: string; totalSegments?: number; segment?: number; filter?: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }; };
字段定义如下:
Scan 字段
-
operation
-
要执行的 DynamoDB 操作。要执行
Scan
DynamoDB 操作,该字段必须设置为Scan
。该值为必填项。 -
filter
-
一个筛选条件,可用于在返回来自 DynamoDB 的结果之前对其进行筛选。有关筛选条件的更多信息,请参阅筛选条件。该字段是可选的。
-
index
-
要查询的索引的名称。除了哈希键的主键索引以外,您还可以通过 DynamoDB 查询操作扫描本地二级索引和全局二级索引。如果指定,这会指示 DynamoDB 查询指定的索引。如果省略,则将查询主键索引。
-
limit
-
单次评估的最大项目数。该字段是可选的。
-
consistentRead
-
一个布尔值,用于指示在查询 DynamoDB 时是否使用一致性读取。该字段是可选的,默认值为
false
。 -
nextToken
-
继续之前查询的分页标记。这应已从之前查询中获得。该字段是可选的。
-
select
-
默认情况下,AWS AppSync DynamoDB 函数仅返回投影到索引中的任何属性。如果需要更多属性,则可以设置该字段。该字段是可选的。支持的值为:
-
ALL_ATTRIBUTES
-
返回指定的表或索引中的所有项目属性。如果您查询本地二级索引,则 DynamoDB 从父表中为索引中的每个匹配项目获取整个项目。如果索引配置为投影所有项目属性,则可以从本地二级索引中获得所有数据,而不要求提取。
-
ALL_PROJECTED_ATTRIBUTES
-
仅在查询索引时才允许。检索已投影到索引的所有属性。如果索引配置为投影所有属性,则此返回值等同于指定
ALL_ATTRIBUTES
。 SPECIFIC_ATTRIBUTES
-
仅返回
projection
的expression
中列出的属性。该返回值相当于指定projection
的Select
,而不指定expression
的任何值。
-
-
totalSegments
-
执行并行扫描时对表进行分区的分段数。该字段是可选的,但如果指定
segment
,则必须指定该字段。 -
segment
-
执行并行扫描时,此操作中的表分段。该字段是可选的,但如果指定
totalSegments
,则必须指定该字段。 projection
-
用于指定从 DynamoDB 操作返回的属性的投影。有关投影的更多信息,请参阅投影。该字段是可选的。
DynamoDB 扫描返回的结果自动转换为 GraphQL 和 JSON 基元类型,并在上下文结果 (context.result
) 中提供。
有关 DynamoDB 类型转换的更多信息,请参阅类型系统(响应映射)。
有关 JavaScript 解析器的更多信息,请参阅 JavaScript 解析器概述。
结果的结构如下所示:
{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }
字段定义如下:
-
items
-
包含 DynamoDB 扫描返回的项目的列表。
-
nextToken
-
如果可能有更多结果,则
nextToken
包含一个分页标记,您可以在另一个请求中使用该标记。AWSAppSync 对从 DynamoDB 返回的分页标记进行加密和模糊处理。这可防止您的表数据无意中泄露给调用方。此外,这些分页标记不能在不同的函数或解析器中使用。 -
scannedCount
-
在应用筛选条件表达式(如果有)之前 DynamoDB 检索的项目数。
示例 1
以下示例是 GraphQL 查询 allPosts
的函数请求处理程序。
在本示例中,将返回表中的所有条目。
export function request(ctx) { return { operation: 'Scan' }; }
示例 2
以下示例是 GraphQL 查询 postsMatching(title: String!)
的函数请求处理程序。
在本示例中,将返回表中标题以 title
参数开头的所有条目。
export function request(ctx) { const { title } = ctx.args; const filter = { filter: { beginsWith: title } }; return { operation: 'Scan', filter: JSON.parse(util.transform.toDynamoDBFilterExpression(filter)), }; }
有关 DynamoDB Scan
API 的更多信息,请参阅 DynamoDB API 文档。