Reputation: 14198
I try to query my dynamoDB from a Lambda function. My table uses "id" as the hash key. I tried both versions below and received the corresponding error messages. What am I doing wrong?
var params = {
TableName : "addresses",
KeyConditionExpression: "id = :id AND city = :city",
ExpressionAttributeValues: {
":id": "Austria",
":city": "Salzburg"
}
};
Unable to query. Error: { "message": "Query key condition not supported",...}
var params = {
TableName : "addresses",
KeyConditionExpression: "city = :city",
ExpressionAttributeValues: {
":city": "Salzburg"
}
};
Unable to query. Error: { "message": "Query condition missed key schema element: id",...}
EDIT:
I now added secondary indices, but still get the same errors:
Upvotes: 10
Views: 13220
Reputation: 10056
if your hash key is 'id' then you cant query by:
KeyConditionExpression: "id = :id AND city = :city"
or by:
KeyConditionExpression: "city = :city"
you can query dynamodb only by hash and range key.
so your query should contain always hash key (id). if you want to query by 'city' also, you should add 'city' as range key to dynamodb table (or local secondary index)
then you can query for a record with 'id'
and 'city'
.
update:
if you want to query for 'city'
KeyConditionExpression: "city = :city"
then you can just add global secondary index to the table.
Upvotes: 13