LoginSignup
0
0

AWS SDK for JavaScript v3 DynamoDB 操作覚書メモ

Last updated at Posted at 2023-10-26

はじめに

AWS SDK for JavaScript v3 で DynamoDB を扱う記事が少ない印象なのでメモ程度に書きなぐっておきます。

公式のサンプル実装もあり、見たのですが、改めて見返すのはちょっと……という抵抗感を感じてしまったので、本当に個人的に最小限メモしておきたいものだけ記載しています。

DynamoDB のテーブルアイテム操作

テーブル設定

設定項目
テーブル名 Music
パーティションキー Artist
ソートキー SongTitle

データ一括操作

一括で追加

BatchWriteCommand(API名としては BatchWriteItem)で最大一括で25件追加が出来る。
25件を超えてしまうなら、事前に以下実装のようにファイルの分割を実施する必要がある。

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, BatchWriteCommand } from "@aws-sdk/lib-dynamodb";

const client = new DynamoDBClient({});

const docClient = DynamoDBDocumentClient.from(client);

const list = [
  ['Perfume', 1, '2005-09-21', 'リニアモーターガール'],
  ['Perfume', 2, '2006-01-11', 'コンピューターシティ'],
  ['Perfume', 3, '2006-06-28', 'エレクトロ・ワールド'],
  ['Perfume', 4, '2007-02-14', 'ファン・サーヴィス[sweet]'],
  ['Perfume', 5, '2007-09-12', 'ポリリズム'],
  ['Perfume', 6, '2008-01-16', 'Baby cruising Love'],
  ['Perfume', 6, '2008-01-16', 'マカロニ'],
  ['Perfume', 7, '2008-07-09', 'love the world'],
  ['Perfume', 8, '2008-11-19', 'Dream Fighter'],
  ['Perfume', 9, '2009-03-25', 'ワンルーム・ディスコ'],
  ['Perfume', 10, '2010-04-14', '不自然なガール'],
  ['Perfume', 10, '2010-04-14', 'ナチュラルに恋して'],
  ['Perfume', 11, '2010-08-11', 'VOICE'],
  ['Perfume', 12, '2010-11-10', 'ねぇ'],
  ['Perfume', 13, '2011-05-18', 'レーザービーム'],
  ['Perfume', 13, '2011-05-18', '微かなカオリ'],
  ['Perfume', 14, '2011-11-02', 'スパイス']];

const chunks = <T>(arrayData: Array<T>, chunkSize: number = 25): Array<Array<T>> =>
  Array.from({ length: Math.ceil(arrayData.length / chunkSize) }, (_, i) =>
    arrayData.slice(i * chunkSize, i * chunkSize + chunkSize));

const commands = chunks(list, 25).map(chunk => {
  const command = new BatchWriteCommand({
    RequestItems: {
      Music: chunk.map(item => ({
        PutRequest: {
          Item: {
            Artist: item[0],
            SongTitle: item[3],
            Release: item[2],
            Numeric: item[1]
          }
        }
      })),
    },
  });
  return docClient.send(command);
});

Promise.all(commands)
  .then(console.log);

一括で削除

以下の差分を適応することでBatchWriteCommand(API名としては BatchWriteItem)で最大一括で25件削除も出来る。

パーティションキーとソートキー以外の属性は渡さないようにする必要があるので注意。

- PutRequest: {
-    Item: {
+ DeleteRequest: {
+    Key: {
      Artist: item[0],
      SongTitle: item[3],
-     Release: item[2],
-     Numeric: item[1]
    }
  }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0