I have a table with the following indices:
- User
- id (string, primary)
- email (string, global secondary)
- expiresOn (Date (string), global secondary)
- is_premium (boolean)
I'd like to have is_premium
be the range / sort key of expiresOn
, so I could e.g query all accounts which are expiring before or on today's date, AND which have is_premium = true.
If i just queried for all accounts expiring before / on today, but without is_premium=true, I would get 90% of the table in the results.
But, if I try to set a range query on is_premium
, I get the following error when I try to save a record to the table:
com.amazonaws.AmazonServiceException: Type mismatch for Index Key (Service: null; Status Code: 400; Error Code: ValidationException; Request ID: null)
at com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.handleDynamoDBLocalServiceException(DDBExceptionMappingInvocationHandler.java:76) at com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.invoke(DDBExceptionMappingInvocationHandler.java:58) at com.sun.proxy.$Proxy70.putItem(Unknown Source) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.doPutItem(DynamoDBMapper.java:1270) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$1.executeLowLevelRequest(DynamoDBMapper.java:879) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1120) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:966) at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:758)
I get this on dynamoDbMapper.save(order)
If I remove the sort / range key, everything works.
Any ideas what I'm doing wrong? The error is very ambigious.