node.js - 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 中的事务?
解决方案
好的,所以,有两个问题(如果它们与本网站无关,请告诉我)。
- 由于第一列的列名后有一个空格字符,因此引发了“Put”错误:“AuthorName”
- 由于 TABLE_V2 不仅使用主键而且还使用搜索键,因此引发了“删除”错误,因此它的 JSON 必须是:
Delete: {
TableName: 'TABLE_V2',
Key: {
AuthorName: {
S: column1Value
},
AuthorTitle: {
S: column2Value
}
}
}
推荐阅读
- android - 用于 Android 设备的 valgrind (Crystax)。配置:错误:C 编译器无法创建可执行文件
- c++ - 如何解决这个错误:className::className 的使用无效?
- docker - 分离 Docker 文件和应用程序源文件以优化生产环境
- ffmpeg - 如何丢弃 FFMPEG 中损坏的帧
- javascript - 使用 JavaScript 将金额转换为单词
- node.js - 无法使用 pouchdb 获得 cookie 身份验证
- python - DRF - 向 Model.save(...) 添加参数
- tensorflow - 冻结我的 keras 模型图时出现 AssertionError
- r - kableExtra:垂直对齐在包含多列的 PDF 输出中不起作用
- json - Dart:无法转换列表
列出