配列に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 }
これらは、テーブルに構成されているセカンダリインデックスです。セカンダリインデックスのスクリーンショット
これまで、私は自分自身に次の質問をしました:
何が足りないの?
これは、投稿されたコードではなく、基盤となるデータベースの問題です。
私のインデックスの1つは、キーに文字列を期待していましたが、データベース内の既存のエントリの多くで、プレースホルダーフィールドがnullに設定されていました(キーを取得したらすぐにそのキーを追加することはわかっていましたが、DynamoDBはそうしませんでした。空の文字列が好きなので、nullに設定します)。
これによりインデックスキー違反が発生し、そのレコードへの後続のすべての書き込みが解決されるまで失敗するようです。
修正は、そのキーを完全に削除するか、実際の文字列をnullとしてフローティングのままにするのではなく、その中に入れることです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加