javascript - DynamoDb 更新失败并出现错误“更新表达式尝试将二级索引键更新为不受支持的类型”
问题描述
我正在运行一个简单的更新以将 UUID 添加到数组中。它失败并显示错误消息“更新表达式试图将二级索引键更新为不受支持的类型”。但我正在更新的字段不是任何二级索引中的键。
这是更新代码:
const params = {
"TableName": "churches",
"Key": {
"churchId": "0194fb2a-9a0f-4b6a-b347-7adffbaed8ff",
"countryId": "UK"
},
"ReturnValues": "ALL_NEW",
"UpdateExpression": "set #team = list_append(if_not_exists(#team, :empty_list), :user)",
"ExpressionAttributeNames": {
"#team": "team"
},
"ExpressionAttributeValues": {
":empty_list": [],
":user": [
"b23fe6cf-83e9-417c-b987-e8e645a29bcd"
]
}
}
db.update(params,(err,data) => {
if(err) console.log('ERROR:',err);
if(data) console.log('DATA:',data);
})
分区键是 ChurchId,countryId 是排序键。
这是输出:
ERROR: { ValidationException: The update expression attempted to update the secondary index key to unsupported type
at Request.extractError (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/protocol/json.js:51:27)
at Request.callListeners (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/request.js:685:12)
at Request.callListeners (/Users/richbee/Library/Mobile Documents/com~apple~CloudDocs/code/ec-api/dbcodetest/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
message:
'The update expression attempted to update the secondary index key to unsupported type',
code: 'ValidationException',
time: 2019-09-20T16:51:08.712Z,
requestId: 'IF0CSPBPQLHBAHOBK299V9KGMVVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 4.443976966236384 }
这些是在表上配置的二级索引: 二级索引的屏幕截图
到目前为止,我已经问过自己以下问题:
- 我是否正在更新二级索引用作键的字段?- 不,我要更新的唯一字段是“团队”,它是一个列表。
- 我是否将任何字段值设置为 JS 可以解释为字符串以外的任何内容?- 不,这是一个 UUID
我错过了什么?!
解决方案
这是因为索引值之一已经是错误的格式。就像它的预期数字一样,但字符串值是插入。更改该字段类型。它会正常工作。
推荐阅读
- r - 我使用的函数返回空结果
- node.js - 在这个示例应用程序中,webpack 如何对供应商文件进行代码拆分
- dji-sdk - 将视频从板载到远程计算机
- database - DolphinDB 是否有与 LIMIT 子句等效的子句?
- c - 编译给定代码时 GCC 访问的文件
- android - 使用已存在的电子邮件或用户名保存用户会导致 ParseUser 返回错误的值
- arrays - 如何将字符串数组作为函数自己的参数传递?编译器说它不起作用
- python - 是否想通过比较 pandas 数据框中的另一列来为新列赋值?
- docker - how to remove all the build history of a docker image?
- c++ - 对随机序列进行下采样会使其随机性降低吗?有没有一个原理/定理可以证明这一点?