首页 > 解决方案 > AWS DynamoDB NodeJS 事务 - 尝试使用 Put & Delete 创建“移动”但 ValidationError

问题描述

我正在尝试在 DynamoDB 中将数据从一个表到另一个表进行简单的事务性“移动”(以添加索引)。这是我正在打的电话,因为我使用 .then() 来解释它,所以返回了承诺,但正如您从结果中看到的那样,我回来,我的 JSON 有问题。不幸的是,错误消息不是很有帮助。非常感谢任何帮助。

var runner = async (column1Value, column2Value) => {
  return await ddb.transactWriteItems({
    TransactItems: [
      {
        Delete: {
          TableName: 'TABLE_V2',
          Key: {
            AuthorName: {
              S: column1Value
            }
          }
        }
      }
      ,
      {
        Put: {
          Item: {
            'AuthorName': {
              S: column1Value
            },
            'AuthorTitle': {
              S: column2Value
            }
          },
          TableName: 'TABLE_V3'
        }
      }
    ]
  }).promise();
}

当我运行我的代码时,我得到以下信息:

    at Request.extractError...
  message: 'Transaction cancelled, please refer cancellation reasons for specific reasons [ValidationError, None]',
  code: 'TransactionCanceledException',
  time: 2019-03-31T00:03:05.401Z,
  requestId: 'URIARNJDVFHDVLQQNR1JMIJP5NVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 400,
  retryable: false,
  retryDelay: 30.057548210067033

我已经阅读了一些网站,但都提到了在 DynamoDB 使用 .transactWriteItems() 原生支持事务之前的时间。例如:如何使用 javascript aws-sdk 支持 dynamoDB 中的事务?

标签: node.jsamazon-web-servicestransactionsamazon-dynamodbvalidationerror

解决方案


好的,所以,有两个问题(如果它们与本网站无关,请告诉我)。

  1. 由于第一列的列名后有一个空格字符,因此引发了“Put”错误:“AuthorName”
  2. 由于 TABLE_V2 不仅使用主键而且还使用搜索键,因此引发了“删除”错误,因此它的 JSON 必须是:
Delete: {
  TableName: 'TABLE_V2',
  Key: {
    AuthorName: {
      S: column1Value
    },
    AuthorTitle: {
      S: column2Value
    }
  }
}

推荐阅读