

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

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

`BatchPutItem` 請求物件可讓您指示 AWS AppSync DynamoDB 函數向 DynamoDB 提出`BatchWriteItem`請求，以放置多個項目，可能跨越多個資料表。對於此請求物件，您必須指定下列項目：
+ 項目將放入其中的資料表名稱
+ 將放入每個資料表的所有項目

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

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

```
type DynamoDBBatchPutItemRequest = {
  operation: 'BatchPutItem';
  tables: {
    [tableName: string]: { [key: string]: any}[];
  };
};
```

欄位定義如下：

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

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

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

** `tables` **  
要放入項目的 DynamoDB 資料表。每個資料表項目代表要為此特定資料表插入的 DynamoDB 項目清單。至少必須提供一個資料表。此值為必填。

注意事項：
+ 若插入成功，回應會傳回完全插入的項目。
+ 如果資料表中並未插入任何項目，該資料表的 data 區塊中就會顯示 *null* 元素。
+ 插入的項目會根據在請求物件內提供的順序，依資料表排序。
+ 不過， 內的每個`Put`命令`BatchPutItem`都是原子的，但可以部分處理批次。如果因錯誤而部分批次處理，則未處理的索引鍵會透過 *unprocessedKeys* 區塊傳回為部分的呼叫結果。
+  `BatchPutItem` 限制為 25 個項目。
+ 與衝突偵測搭配使用時，**不支援**此操作。同時使用兩者可能會導致錯誤。

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

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

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

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

```
{
   "data": {
     "authors": [
         null
     ],
     "posts": [
        // Was inserted
        {
          "authorId": "a1",
          "postId": "p2",
          "title": "title"
        }
     ]
   },
   "unprocessedItems": {
     "authors": [
        // This item was not processed due to an error
        {
          "authorId": "a1",
          "name": "a1_name"
        }
      ],
     "posts": []
   }
}
```

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