我对AWS数据库,Node.JS和Express完全不熟悉。我需要对AWS dynamodb数据库进行多次查询(汇总所有device_id计数并循环遍历所有bin)。我的代码如下。查询参数逻辑不完整,但我甚至无法确定从哪里开始编译异步逻辑并将查询返回到我的API中输出。
我尝试了嵌套循环,但很快意识到逻辑错误,因为所有数据库调用都是异步的。我尝试使用async.map()但无法弄清楚如何完成它。我应该重复我对deviceIds的async.map()所做的事情,但是将它嵌套在bin中?如何将内部async.map()值返回到外部呢?或者有一种更优雅的方式来做到这一点,我甚至没有想过?
如果有人有任何额外资源和/或基本框架的描述,我将非常感激。
谢谢!
var getCoffeeHistogram = function() {
var counts = [];
var bins = fillRange(16);
var deviceIDs = fillRange(18);
var i;
for (i = 0; i < 16; i++) {
async.map(
deviceIDs,
function(deviceID, callback) {
var param = {
TableName: "iot-coffeecounts",
ExpressionAttributeValues: {
':id': "" + deviceID,
':time': "1"
},
ExpressionAttributeNames: {
"#ts": "timestamp"
},
KeyConditionExpression: "device_id = :id and #ts > :time"
};
docClient.query(param, function(err, data) {
if (err) {
console.log("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Querying Succeeded for device");
}
callback(null, data.Count);
});
},
function(err, coffeeCounts) {
console.log(function(coffeeCounts) {
var total = 0;
for (count in coffeeCounts) {
total = total + count;
}
return total;
});
}
);
}
};
答案 0 :(得分:0)
您可以在dynamodb中使用batchGet方法在单个查询中返回所有设备ID的结果,而不是通过设备ID循环并发出多个查询(效率非常低)。
您只需根据文档构建包含所有设备ID的查询对象并发出查询。