Я пытаюсь получить данные из DynamoDB по определенным критериям, идея в том, чтобы получить только userid
и modules_completed
на прошлой неделе. Я могу изменить структуру данных, если вы считаете, что лучше использовать правильный подход.
Я пытаюсь получить все данные, затем фильтровать, но я думаю, что есть способ сделать это лучше и получить только те данные, которые мне нужны
Вот структура данных
{
"modules_complete": {
"19huH6KOy0EYau0e0Oc6CG": "2018-12-15T00:00:00",
"1Fr3I1pE6IcSEy4s0o0UwW": "2018-12-31T00:00:00",
"1G4eA3HDhCOcUgaIsg46OU": "2018-12-31T00:00:00",
"1H60VNa4dG0AkuM0agwkI6": "2019-05-10T00:00:00",
"1UIrWAsEP6YUyQEiy4WAww": "2018-12-31T00:00:00",
"3extCHS2cg02YCY6GMEkG6": "2018-12-31T00:00:00",
"3u1BA8lkVYR9fHKiLzRge7": "2019-04-05T00:00:00",
"4eQUYsAKvDYYT7113b3E6J": "2019-04-05T00:00:00",
"4gnGMMruak2qU0yQqy884g": "2018-12-15T00:00:00",
"4Pwu13n5DJerzgv5T2Ryeu": "2019-04-05T00:00:00",
"6lk1HPWKNaY0mWkU0Io6iq": "2018-12-31T00:00:00"
},
"scores": {
"3GDBJOWUJ2OW4mQm26YwGo": 0,
"4vhRRSqeUwEoAKSqOagwWU": 100
},
"userid": "00570000001J1crAAC"
}
А вот код, который я сделал
var date = new Date();
date.setDate(date.getDate() - 7);
const lastWeek = moment(date).format("YYYY-MM-DDTHH:mm:ss");
var params = {
TableName: 'table-name',
};
dynamodb.scan(params, function (err, data) {
if (err) console.log(err, err.stack);
else {
var items = data.Items;
var modulesCompletedLastWeek = []
for (const item of items) {
var modules = item.modules_complete.M;
var userId = item.userid.S;
var modulesCompleted = []
for (const module in modules) {
if (modules.hasOwnProperty(module))
if (modules[module].S > lastWeek) {
modulesCompleted.push(moduleInfo)
}
}
}
console.log('modulesCompletedLastWeek', modulesCompletedLastWeek);
}
});
Я ожидал массив с объектом модулей, завершенным на прошлой неделе, и идентификатором пользователя.
PLUS Можно ли заставить получать те же данные, но с диапазоном дат?
Спасибо