扫描 - AWS AppSync

扫描

通过使用 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

仅返回 projectionexpression 中列出的属性。该返回值相当于指定 projectionSelect,而不指定 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 文档