1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DynamoDBで、項目のみの削除と1レコード削除の方法(Dynamo独特のルールをなんとかする)

Last updated at Posted at 2020-11-02

Dynamoの面倒なルール

1レコード削除ではなく一つの項目のデータのみを削除したい場合、updateで空文字を指定して更新しようと思うが、Dynamoは空文字を指定できない。

半角スペースを入れてアップデートはできるが、それだとデータが存在していることになるし、
半角スペースで文字列比較してチェックするのもちょっと良くない。

項目のみを削除する方法、ググってもなかなか出てこなくて大変だった。

普通に1レコードを削除する方法

テーブル名とハッシュ値を指定してdeleteする

anime-suko.ts
  const deleteHogeTableParams = {
    TableName: 'hogeTable',
    Key: {
      id: '114514',
    },
  }
 await documentClient.delete(deleteHogeTableParams).promise()

項目のみを削除

このように、普通のupdate()ではなく「transactWrite()」使って、
「UpdateExpression: 'Remove #hd, #nd'」って感じで項目を指定してRemoveする。

anime-suko.ts
  const deleteHogeTableParams = {
    TransactItems: [
      {
        Update: {
          TableName: 'hogeTable',
          Key: {
            id: '114514',
          },
          ExpressionAttributeNames: {
            '#hd': 'hogeDate',
            '#nd': 'nazonazoDate',
          },
          UpdateExpression: 'Remove #hd, #nd',
        },
      },
    ],
   await documentClient.transactWrite(deleteHogeTableParams).promise()

感想

マジでDymano使っててなんもいいことない。MySQLだったら一瞬で出来ることを、Dynamoだと便利な機能が少ないし制限がひどすぎるし、ちょっとしたことでもわりと複雑な設定しなくてはならない。。。
データ取得するとき、必ずハッシュ値指定しなきゃいけないとか意味わからん。他のカラム(属性)を条件にしたかったらグローバルセカンダリーインデックスの設定ファイルを書かなきゃいけなかったり。。。

AWS使ってるけどMySQLでええやん。。。(業務の愚痴)

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?