Hello,
I seem to be having a strange issue when querying on my GSI that as soon as I specify the fields I wish to return in the query, I get the "Unsupported type passed" error.
Here's the query:
{
TableName: 'RatingsTable',
IndexName: 'username',
KeyConditionExpression: '#username = :username',
ExpressionAttributeNames: { '#username': 'username' },
ExpressionAttributeValues: { ':username': { S: 'jonathanmsifleet' } },
ProjectionExpression: 'username, imdb_title_id'
}
The table:
RatingsTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: RatingsTable
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: imdb_title_id
AttributeType: N
- AttributeName: username
AttributeType: S
KeySchema:
- AttributeName: imdb_title_id
KeyType: HASH
- AttributeName: username
KeyType: RANGE
GlobalSecondaryIndexes:
- IndexName: username
KeySchema:
- AttributeName: username
KeyType: HASH
Projection:
ProjectionType: ALL
The strange thing is that if I remove ProjectionExpression
from the query it executes fine, yet as soon as I specify fields then it throws the error. The error in its entirety in Cloudwatch is Unsupported type passed: username
, if I remove username then it moves to the next field, Unsupported type passed: imdb_title_id
.
Here's the code I am using to run the query:
query = {
TableName: 'RatingsTable',
IndexName: 'username',
KeyConditionExpression: '#username = :username',
ExpressionAttributeNames: {
'#username': 'username'
},
ExpressionAttributeValues: {
':username': { S: username }
},
ProjectionExpression: 'username, imdb_title_id'
};
console.log('query', query);
const result = await dbClient.send(new QueryCommand(query));
Any ideas what I am doing wrong?
Without specifying the Data type for ExpressionAttributeValues, TypeScript throws this error:
Type 'string' is not assignable to type 'AttributeValue'
and CloudWatch gives this error,Cannot read property '0' of undefined
. I'll try downgrading to 3.44 as I'm using 3.54.1Edit: Downgrading and Specifying Data type solved this!