何をしたのか?
先日同様にAWS SDK(Node.js)のdocumentClientクラスでqueryを投げようとしていた。
エラー内容(タイトルと同じ)
One or more parameter values were invalid: Condition parameter type does not match schema type
その際にこのエラーに遭遇し、解決しようと試みているときに出会ったもの。
問題の引数param
let params = { TableName: TABLE_NAME, ExpressionAttributeValues:{ ":hash": {"S":hash_key}, ":range": {"S":range_key} }, KeyConditionExpression:"test_group = :hash AND test_id = :range" };
原因は?
DynamoDBを触ったことがある人なら上記問題無いように見えるが、これはDocumentClientクラスを使っているのにExpressionAttributeValues
でエイリアスを定義する際に"S"
のように型情報をキーとしたハッシュで定義してしまっている。
DocumentClientクラスは型定義が不要になる便利なクラスなので、今回のように型定義をつけてしまうと逆にエラーになってしまう。
今回は型定義をつけてしまったことで、このエラーが発生したが、逆にこの型定義を忘れていても同様のエラーが発生する(おそらくdocumentClientクラスを使用するケースは少ないのでこっちのほうが多数派)ので同様に確認の指標とすると良いだろう。
修正結果
先日の解と同じだが、以下で解決する。
let params = { TableName: TABLE_NAME, ExpressionAttributeValues:{ ":hash": hash_key, ":range": range_key }, KeyConditionExpression:"test_group = :hash AND test_id = :range" };