

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

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

`BatchGetItem` 請求物件可讓您指示 AWS AppSync DynamoDB 函數向 DynamoDB 提出`BatchGetItem`請求，以擷取可能跨多個資料表的多個項目。對於此請求物件，您必須指定下列項目：
+ 將從其中擷取項目的資料表名稱
+ 將從個別資料表擷取項目的索引鍵

此時會套用 DynamoDB `BatchGetItem` 限制，且可能不會提供**任何條件表達式**。

`BatchGetItem` 請求物件具有下列結構：

```
type DynamoDBBatchGetItemRequest = {
  operation: 'BatchGetItem';
  tables: {
    [tableName: string]: {
      keys: { [key: string]: any }[];
      consistentRead?: boolean; 
      projection?: {
        expression: string;
        expressionNames?: { [key: string]: string };
      };
    };
  };
};
```

欄位定義如下：

## BatchGetItem 欄位
<a name="js-BatchGetItem-list"></a>

### BatchGetItem 欄位清單
<a name="js-BatchGetItem-list-col"></a>

** `operation` **  
要執行的 DynamoDB 操作。若要執行 `BatchGetItem` DynamoDB 操作，這必須設為 `BatchGetItem`。此值為必填。

** `tables` **  
要從中擷取項目的 DynamoDB 資料表。此值是其中將資料表名稱指定為該映射索引鍵的映射。至少必須提供一個資料表。`tables` 值為必填。    
** `keys` **  
代表要擷取之項目主索引鍵的 DynamoDB 索引鍵清單。DynamoDB 項目可能有單一雜湊索引鍵，或雜湊索引鍵和排序索引鍵，視資料表結構而定。如需如何指定「輸入值」的詳細資訊，請參閱[類型系統 （請求映射）](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)。  
** `consistentRead` **  
執行 *GetItem* 操作時是否使用一致性讀取。此值為選用值，且預設值為 *false*。  
**`projection`**  
用於指定要從 DynamoDB 操作傳回之屬性的投影。如需投影的詳細資訊，請參閱[投影](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-projections)。此欄位為選用欄位。

注意事項：
+ 如果未從資料表中擷取任何項目，該資料表的 data 區塊中會顯示 *null* 元素。
+ 調用結果會根據在請求物件內提供的順序，依資料表排序。
+ 中的每個`Get`命令`BatchGetItem`都是原子的，但批次可以部分處理。如果因錯誤而部分批次處理，則未處理的索引鍵會透過 *unprocessedKeys* 區塊傳回為部分的呼叫結果。
+  `BatchGetItem` 限制為 100 個索引鍵。

對於下列範例函數請求處理常式：

```
import { util } from '@aws-appsync/utils';

export function request(ctx) {
  const { authorId, postId } = ctx.args;
  return {
    operation: 'BatchGetItem',
    tables: {
      authors: [util.dynamodb.toMapValues({ authorId })],
      posts: [util.dynamodb.toMapValues({ authorId, postId })],
    },
  };
}
```

可透過 `ctx.result` 提供的呼叫結果如下所示：

```
{
   "data": {
     "authors": [null],
     "posts": [
        // Was retrieved
        {
          "authorId": "a1",
          "postId": "p2",
          "postTitle": "title",
          "postDescription": "description",
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        // This item was not processed due to an error
        {
          "authorId": "a1"
        }
      ],
     "posts": []
   }
}
```

`ctx.error` 包含錯誤的詳細資訊。金鑰**資料**、**unprocessedKeys** 和在函數請求物件結果中提供的每個資料表金鑰，保證會出現在調用結果中。已刪除的項目會出現在 **data** 區塊中。尚未處理的項目在該 data 區塊中會標示為 *null*，並置於 **unprocessedKeys** 區塊。