

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

# BatchGetItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-batch-get-item"></a>

`BatchGetItem`请求映射文档允许您告诉 D AWS AppSync ynamoDB 解析器向 DynamoDB `BatchGetItem` 请求检索多个项目，可能跨多个表。对于此请求模板，您必须指定以下各项：
+ 要从中检索项目的表名称
+ 要从每个表中检索的项目的键

DynamoDB `BatchGetItem` 限制适用，并且无法提供**任何条件表达式**。

`BatchGetItem` 映射文档具有以下结构：

```
{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "table1": {
           "keys": [
              ## Item to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item2 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,            
            "projection" : {
                 ...
            }
        },
        "table2": {
           "keys": [
              ## Item3 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item4 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,
            "projection" : {
                 ...
            }
        }
    }
}
```

字段定义如下：

## BatchGetItem 字段
<a name="BatchGetItem-list"></a>

### BatchGetItem 字段列表
<a name="BatchGetItem-list-col"></a>

** `version` **  
模板定义版本。仅支持 `2018-05-29`。该值为必填项。

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

** `tables` **  
要从中检索项目的 DynamoDB 表。该值是一个映射，其中表名称被指定为映射的键。必须提供至少一个表。该 `tables` 值为必填项。    
** `keys` **  
DynamoDB 键列表，表示要检索的项目的主键。DynamoDB 项目可能具有单个哈希键，也可能具有哈希键和排序键，具体取决于表结构。有关如何指定“类型化值”的更多信息，请参阅[类型系统（请求映射）](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)。  
** `consistentRead` **  
执行*GetItem*操作时是否使用一致性读取。此值是可选的，默认为 *false*。  
**`projection`**  
用于指定从 DynamoDB 操作返回的属性的投影。有关投影的更多信息，请参阅[投影](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections)。该字段是可选的。

要记住的事项：
+ 如果尚未从表中检索某个项目，则 *null* 元素将显示在该表的数据块中。
+ 根据在请求映射模板中提供调用结果的顺序，将按表对这些结果进行排序。
+ `BatchGetItem` 中的每个 `Get` 命令都是原子性的，但可以部分处理一个批次。如果由于错误而部分处理一个批处理，则未处理的键将作为 *unprocessedKeys* 块内的调用结果的一部分返回。
+  `BatchGetItem` 限制为 100 个键。

对于以下示例请求映射模板：

```
{
  "version": "2018-05-29",
  "operation": "BatchGetItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          }
        }
    ],
  }
}
```

`$ctx.result` 中可用的调用结果如下所示：

```
{
   "data": {
     "authors": [null],
     "posts": [
        # Was retrieved
        {
          "author_id": "a1",
          "post_id": "p2",
          "post_title": "title",
          "post_description": "description",
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        # This item was not processed due to an error
        {
          "author_id": "a1"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error` 包含有关该错误的详细信息。保证键**数据**、**unprocessedKeys** 和请求映射模板中提供的每个表键都出现在调用结果中。已删除的项目显示在**数据**块中。尚未处理的项目将在数据块中标记为 *null* 并置于 **unprocessedKeys** 块中。

要获得更完整的示例，请按照 DynamoDB 批处理教程进行操作，这里[有 AppSync 教程：Dynamo](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) DB 批处理解析器。