DynamoDBのQueryCommandオブジェクトの作成エラー
解決したいこと
DynamoDBのソートキーとハッシュキーのあるテーブルに対して、ソートキーの条件のみ指定してデータを取得したい
取得したい属性
- userName
- partition
ハッシュキー、ソートキーをそれぞれ割り当てる
partitionのみを条件式として指定したい
該当するソースコード
// テーブル作成時のコードの一部
const command = new CreateTableCommand({
TableName: 'Shifts',
AttributeDefinitions: [
{
AttributeName: 'partition',
AttributeType: 'S',
},
{
AttributeName: 'userName',
AttributeType: 'S',
},
],
KeySchema: [
{
AttributeName: 'partition',
KeyType: 'HASH',
},
{
AttributeName: 'userName',
KeyType: 'RANGE',
},
],
BillingMode: 'PROVISIONED',
ProvisionedThroughput: {
ReadCapacityUnits: 5,
WriteCapacityUnits: 5,
},
// コード終わり
DownloadShiftsBetweenPartitions(
startpartition: string,
endpartition: string,
) {
const command = new QueryCommand({
TableName: 'Shifts',
KeyConditionExpression: '#hashKey BETWEEN :startValue AND :endValue',
ExpressionAttributeNames: {
'#hashKey': 'partition',
},
ExpressionAttributeValues: {
':startValue': { S: startpartition },
':endValue': { S: endpartition },
},
});
//~~~~~~~~~~~~~~
}
発生している問題・エラー
"Invalid KeyConditionExpression: Incorrect operand type for operator or function; operator or function: BETWEEN, operand type: M"
自分で試したこと
- ExpressionAttributeValuesの指定方法をhttps://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v3/developer-guide/javascript_dynamodb_code_examples.html のサイトを参考に変えてみた
Query key condition not supported
指定方法が違うといわれました
- そもそも複数のデータを取得すればいいのでIN演算子をためした
- 無効な演算子だとエラーが出た
- ハッシュキー、ソートキーをそれぞれ入れ替えた
- BETWEENの指定はできるがハッシュキーを指定しなくてはいけなくなった