1. ホーム
  2. node.js

[解決済み] DynamoDBで一括削除するにはどうしたらいいですか?

2022-02-04 22:11:19

質問

提供されたキー要素がスキーマと一致しない」というエラーが発生します。 uuid は私のプライマリパーティションキーです。また、主ソートキーは version . を使うことができると考えました。 batchWrite ( ドキュメント を含むすべてのアイテムを削除するには、同じ uuid .

私のES6コードは以下の通りです。

delete(uuid) {
  const promise = new Promise();
  const params = {
    RequestItems: {
      [this.TABLE]: [
        {
          DeleteRequest: {
            Key: { uuid: uuid }
          }
        }
      ]
    }
  };


  // this._client references the DocumentClient
  this._client.batchWrite(params, function(err, data) {
    if (err) {
      // this gets hit with error
      console.log(err);
      return promise.reject(err);
    }

    console.log(result);
    return promise.resolve(result);
  });

  return promise;
}

なぜプライマリであるキーでエラーになるのかよくわかりません。キーでないもので検索するときに他のインデックスが必要だという書き込みを見たことがあります。しかし、今回のケースはそうではないと思っています。

どのように解決するのですか?

以下は、書き込み削除リクエストの一括処理サンプルです。このコードはテスト済みで、問題なく動作しています。このコードをあなたの要件に合わせて変更すれば、動作するはずです。

テーブルの定義:-)

バッグ - テーブル名

bag - ハッシュキー

Bag'テーブルのパーティションキーがない

バッチ書き込みコード:-)

var AWS = require("aws-sdk");

AWS.config.update({
    region : "us-west-2",
    endpoint : "http://localhost:8000"
});

var documentclient = new AWS.DynamoDB.DocumentClient();

var itemsArray = [];

var item1 = {
    DeleteRequest : {
        Key : {
            'bag' : 'b1'    
        }
    }
};

itemsArray.push(item1);

var item2 = {
    DeleteRequest : {
        Key : {
            'bag' : 'b2'    
        }
    }
};

itemsArray.push(item2);

var params = {
    RequestItems : {
        'Bag' : itemsArray
    }
};
documentclient.batchWrite(params, function(err, data) {
    if (err) {
        console.log('Batch delete unsuccessful ...');
        console.log(err, err.stack); // an error occurred
    } else {
        console.log('Batch delete successful ...');
        console.log(data); // successful response
    }

});

出力:-

Batch delete successful ...
{ UnprocessedItems: {} }