

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

`BatchGetItem` 請求映射文件可讓您告知 AWS AppSync DynamoDB 解析程式向 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)。此欄位為選用欄位。

注意事項：
+ 如果未從資料表中擷取任何項目，該資料表的 data 區塊中會顯示 *null* 元素。
+ 調用結果會根據在請求映射範本中提供的順序，依資料表排序。
+ 中的每個`Get`命令`BatchGetItem`都是原子的，但批次可以部分處理。如果因錯誤而部分批次處理，則未處理的索引鍵會透過 *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` 包含錯誤的詳細資訊。在要求映射範本中所提供的索引鍵 **data**、**unprocessedKeys** 及個別資料表索引鍵，都確定會出現在呼叫結果中。已刪除的項目會出現在 **data** 區塊中。尚未處理的項目在該 data 區塊中會標示為 *null*，並置於 **unprocessedKeys** 區塊。

如需更完整的範例，請遵循此處 AppSync 的 DynamoDB 批次教學[課程教學課程：DynamoDB 批次解析程式](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch)。