查询 - AWS AppSync

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询

Query请求对象允许您告诉 D AWS AppSync ynamoDB 解析器向 DynamoDB 发出Query请求,并允许您指定以下内容:

  • 键表达式

  • 要使用的索引

  • 任何额外的筛选条件

  • 要返回多少个项目

  • 是否使用一致性读取

  • 查询方向(向前或向后)

  • 分页标记

Query 请求对象具有以下结构:

type DynamoDBQueryRequest = { operation: 'Query'; query: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; index?: string; nextToken?: string; limit?: number; scanIndexForward?: boolean; consistentRead?: boolean; select?: 'ALL_ATTRIBUTES' | 'ALL_PROJECTED_ATTRIBUTES' | 'SPECIFIC_ATTRIBUTES'; filter?: { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: any }; }; projection?: { expression: string; expressionNames?: { [key: string]: string }; }; };

字段定义如下:

Query 字段

operation

要执行的 DynamoDB 操作。要执行 Query DynamoDB 操作,该字段必须设置为 Query。该值为必填项。

query

query 部分用于指定一个键条件表达式,用于描述要从 DynamoDB 中检索哪些项目。有关如何编写关键条件表达式的更多信息,请参阅 DynamoDB 文档 KeyConditions 。必须指定此部分。

expression

查询表达式。必须指定该字段。

expressionNames

以键值对形式替换表达式属性名称 占位符。键对应于 expression 中使用的名称占位符,值必须是与 DynamoDB 中的项目的属性名称对应的字符串。该字段是可选的,只应填充 expression 中使用的表达式属性名称占位符的替换内容。

expressionValues

以键值对形式替换表达式属性 占位符。键对应于 expression 中使用的值占位符,而值必须为类型化值。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。该字段是可选的,只应填充 expression 中使用的表达式属性值占位符的替换内容。

filter

另一个筛选条件,该筛选条件可用于在从 DynamoDB 返回结果之前先筛选结果。有关筛选条件的更多信息,请参阅筛选条件。该字段是可选的。

index

要查询的索引的名称。除了哈希键的主键索引以外,您还可以通过 DynamoDB 查询操作扫描本地二级索引和全局二级索引。如果指定,这会指示 DynamoDB 查询指定的索引。如果省略,则将查询主键索引。

nextToken

继续之前查询的分页标记。这应已从之前查询中获得。该字段是可选的。

limit

要评估的最大项目数(不一定是匹配项目数)。该字段是可选的。

scanIndexForward

一个布尔值,指示是向前还是向后查询。该字段是可选的,默认值为 true

consistentRead

一个布尔值,用于指示在查询 DynamoDB 时是否使用一致性读取。该字段是可选的,默认值为 false

select

默认情况下, AWS AppSync DynamoDB 解析器仅返回投影到索引中的属性。如果需要更多属性,则可以设置该字段。该字段是可选的。支持的值为:

ALL_ATTRIBUTES

返回指定的表或索引中的所有项目属性。如果您查询本地二级索引,则 DynamoDB 从父表中为索引中的每个匹配项目获取整个项目。如果索引配置为投影所有项目属性,则可以从本地二级索引中获得所有数据,而不要求提取。

ALL_PROJECTED_ATTRIBUTES

仅在查询索引时才允许。检索已投影到索引的所有属性。如果索引配置为投影所有属性,则此返回值等同于指定 ALL_ATTRIBUTES

SPECIFIC_ATTRIBUTES

仅返回 projectionexpression 中列出的属性。该返回值相当于指定 projectionSelect,而不指定 expression 的任何值。

projection

用于指定从 DynamoDB 操作返回的属性的投影。有关投影的更多信息,请参阅投影。该字段是可选的。

来自 DynamoDB 的结果会自动转换为 GraphQL JSON 和原始类型,并可在上下文结果 () 中找到。context.result

有关 DynamoDB 类型转换的更多信息,请参阅类型系统(响应映射)

有关 JavaScript 解析器的更多信息,请参阅解析JavaScript 器概述。

结果的结构如下所示:

{ items = [ ... ], nextToken = "a pagination token", scannedCount = 10 }

字段定义如下:

items

包含 DynamoDB 查询返回的项目的列表。

nextToken

如果可能有更多结果,则 nextToken 包含一个分页标记,您可以在另一个请求中使用该标记。请注意,它 AWS AppSync 会对从 DynamoDB 返回的分页令牌进行加密和模糊处理。这可防止您的表数据无意中泄露给调用方。另请注意,这些分页标记不能在不同的函数或解析器中使用。

scannedCount

在应用筛选表达式(如果有)之前与查询条件表达式匹配的项目的数量。

示例

以下示例是 GraphQL 查询 getPosts(owner: ID!) 的函数请求处理程序。

在本示例中,将对表的全局二级索引执行查询,以返回指定的 ID 拥有的所有文章。

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { owner } = ctx.args; return { operation: 'Query', query: { expression: 'ownerId = :ownerId', expressionValues: util.dynamodb.toMapValues({ ':ownerId': owner }), }, index: 'owner-index', }; }

有关 DynamoDB 的更多信息,请参阅 Query API DynamoDB 文档。API