

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

# Query
<a name="js-aws-appsync-resolver-reference-dynamodb-query"></a>

`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 字段
<a name="js-query-list"></a>

### Query 字段列表
<a name="js-query-list-col"></a>

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

** `query` **  
`query` 部分用于指定一个键条件表达式，用于描述要从 DynamoDB 中检索哪些项目。有关如何编写关键条件表达式的更多信息，请参阅 [DynamoDB 文档 KeyConditions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.KeyConditions.html)。必须指定此部分。    
** `expression` **  
查询表达式。必须指定该字段。  
** `expressionNames` **  
以键值对形式替换表达式属性*名称* 占位符。键对应于 `expression` 中使用的名称占位符，值必须是与 DynamoDB 中的项目的属性名称对应的字符串。该字段是可选的，只应填充 `expression` 中使用的表达式属性名称占位符的替换内容。  
** `expressionValues` **  
以键值对形式替换表达式属性*值* 占位符。键对应于 `expression` 中使用的值占位符，而值必须为类型化值。有关如何指定“类型化值”的更多信息，请参阅[类型系统（请求映射）](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)。该值为必填项。该字段是可选的，只应填充 `expression` 中使用的表达式属性值占位符的替换内容。

** `filter` **  
另一个筛选条件，该筛选条件可用于在从 DynamoDB 返回结果之前先筛选结果。有关筛选条件的更多信息，请参阅[筛选条件](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-filter)。该字段是可选的。

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

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

** `limit` **  
要评估的最大项目数（不一定是匹配项目数）。该字段是可选的。

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

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

** `select` **  
默认情况下， AWS AppSync DynamoDB 解析器仅返回投影到索引中的属性。如果需要更多属性，则可以设置该字段。该字段是可选的。支持的值为：    
** `ALL_ATTRIBUTES` **  
返回指定的表或索引中的所有项目属性。如果您查询本地二级索引，则 DynamoDB 从父表中为索引中的每个匹配项目获取整个项目。如果索引配置为投影所有项目属性，则可以从本地二级索引中获得所有数据，而不要求提取。  
** `ALL_PROJECTED_ATTRIBUTES` **  
仅在查询索引时才允许。检索已投影到索引的所有属性。如果索引配置为投影所有属性，则此返回值等同于指定 `ALL_ATTRIBUTES`。  
**`SPECIFIC_ATTRIBUTES`**  
仅返回 `projection` 的 `expression` 中列出的属性。该返回值相当于指定 `projection` 的 `Select`，而不指定 `expression` 的任何值。

**`projection`**  
用于指定从 DynamoDB 操作返回的属性的投影。有关投影的更多信息，请参阅[投影](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections)。该字段是可选的。

来自 DynamoDB 的结果自动转换为 GraphQL 和 JSON 基元类型，并在上下文结果 (`context.result`) 中提供。

有关 DynamoDB 类型转换的更多信息，请参阅[类型系统（响应映射）](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-responses)。

有关 JavaScript 解析器的更多信息，请参阅解析[JavaScript 器](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html)概述。

结果的结构如下所示：

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

字段定义如下：

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

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

** `scannedCount` **  
在应用筛选表达式（如果有）之前与查询条件表达式匹配的项目的数量。

## 示例
<a name="js-id9"></a>

以下示例是 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 文档](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html)。