I have a DynamoDB table where I store this data;
where "device" is the partition key and "datetime" the sort key. I'm able to query data based on PartitionKey and range of dates (sort key). But now, I would need to filter based on "endpoint" which is inside "data" which is an array. For example, I would like to retrieve the data only if endpoint 1 exist in data array, or for example if endpoint IN (1,3) exist. I 'm using following code;
var dev = event.params.querystring.device;
var from = event.params.querystring.from;
var to = event.params.querystring.to;
var ascord = event.params.querystring.ascord;
var limit = event.params.querystring.limit;
var qryParams = {
TableName : "mytable",
KeyConditionExpression: "#id = :dddd and #tm between :time1 and :time2",
FilterExpression: "data.endpoint = :ep",
ExpressionAttributeNames:{
"#id": "device",
"#tm": "datetime"
},
ExpressionAttributeValues: {
":dddd": dev,
":time1": from,
":time2": to,
":ep": 1
}
};
docClient.query(qryParams, function(err, data){
if (err){
callback(err, null);
}else {
callback(null, data);
}
})
But it doesn't retrieve any record. I also tried to use placeholders (#data.#endpoint) but didn't work. What would be the right way to do it? Also, should I create an index in the table for the endpoints?
Thanks for your help. Regards; Gus