Skip to content

Instantly share code, notes, and snippets.

@diegofcornejo
Created October 12, 2021 17:18
Show Gist options
  • Select an option

  • Save diegofcornejo/1f696eb3cc988e7305cbdb5112c15a11 to your computer and use it in GitHub Desktop.

Select an option

Save diegofcornejo/1f696eb3cc988e7305cbdb5112c15a11 to your computer and use it in GitHub Desktop.
Lambda - Query DynamoDB items between ISO dates
const AWS = require('aws-sdk');
const REGION = 'us-east-1';
const DYNAMODB = new AWS.DynamoDB.DocumentClient();
const TABLE = "ttn-events";
exports.handler = async(event) => {
var date = new Date();
//dates should be obtained from request
var end = date.toISOString();
var start = new Date(date.setDate(date.getDate()-7)).toISOString();
let params = {
TableName: TABLE,
ProjectionExpression:"#dvc, #tm, decoded_payload",
KeyConditionExpression: "#dvc = :deviceId and #tm between :start and :end",
ExpressionAttributeNames: {
"#dvc": "device",
"#tm": "time"
},
ExpressionAttributeValues: {
":deviceId": event.pathParameters.id,
":start": start,
":end": end
}
};
let results = await DYNAMODB.query(params).promise();
if (results.Items) {
var data = [];
results.Items.map(async(event, i) => {
const payload = JSON.parse(event.decoded_payload);
let obj = {
"device": event.device,
"time": event.time,
...payload
};
data.push(obj);
});
// return data;
let response = {
statusCode: 200,
body: JSON.stringify(data),
};
return response;
}
else {
let response = {
statusCode: 500,
body: JSON.stringify(results),
};
return response;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment