

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

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

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

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

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

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

欄位定義如下：

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

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

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

** `tables` **  
要從中刪除項目的 DynamoDB 資料表。每個資料表都是代表要刪除項目之主索引鍵的 DynamoDB 索引鍵清單。DynamoDB 項目可能具有單一雜湊索引鍵，或雜湊索引鍵和排序索引鍵，視資料表結構而定。如需如何指定「輸入值」的詳細資訊，請參閱[類型系統 （請求映射）](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-typed-values-request)。至少必須提供一個資料表。`tables` 值為必要。

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

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

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

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

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

```
{
   "data": {
     "authors": [null],
     "posts": [
        // Was deleted
        {
          "authorId": "a1",
          "postId": "p2"
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        // This key was not processed due to an error
        {
          "authorId": "a1"
        }
      ],
     "posts": []
   }
}
```

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