首页 > 解决方案 > 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 }

这些是在表上配置的二级索引: 二级索引的屏幕截图

到目前为止,我已经问过自己以下问题:

我错过了什么?!

标签: javascriptamazon-dynamodb

解决方案


这是因为索引值之一已经是错误的格式。就像它的预期数字一样,但字符串值是插入。更改该字段类型。它会正常工作。


推荐阅读