node.js - Dynamodb 得到大约 10,000 t0 30,000 条记录 nodejs
问题描述
getDBResults(id,
startDate_Timestamp,
endDate_Timestamp).then(data,
err)=> {
if (err) console.log("EE", err);
console.log("DD",data);
if (data.length != 0) {
res.json({ "Status": 200, "Data": data });
}
})
function getDBResults(id, startDate_Timestamp,
endDate_Timestamp) {
var q = Q.defer();
const params = {
TableName: 'TableName',
KeyConditionExpression: '#Id=:Id AND #Timestamp BETWEEN
:start_date AND :end_date',
ExpressionAttributeNames: {
"#Timestamp": "Timestamp",
"#Id": "Id"
},
ExpressionAttributeValues: {
":Id": id,
":start_date": startDate_Timestamp,
":end_date": endDate_Timestamp
}
};
var results = [];
var callback = function (err, data) {
console.log("DD", data);
if (err) {
console.log('Dynamo fail ' + err);
q.reject(err);
} else if (data.LastEvaluatedKey) {
params.ExclusiveStartKey = data.LastEvaluatedKey;
docclient.query(params, callback);
} else {
console.log("RR",results);
q.resolve(results);
}
data.Items.forEach(function (item) {
results.push(item);
});
}
docclient.query(params, callback);
return q.promise;
}
使用此代码,我没有得到任何结果,并且该 id 的结果包含近 20,000 到 30,000 条记录。我想获取所有记录,但它没有在 aws 控制台上记录任何内容。请帮我弄清楚
解决方案
不确定这是解决方案,但我会results
在调用新查询之前尝试插入:
} else if (data.LastEvaluatedKey) {
// save items
data.Items.forEach(function (item) { results.push(item); });
params.ExclusiveStartKey = data.LastEvaluatedKey;
docclient.query(params, callback);
}
建议:考虑使用 Promise,它们更容易使用。您的代码是“回调地狱”:)
推荐阅读
- django - 如何更新对象并重定向回主页?
- flutter - 我想制作一个 3d 旋转木马,就像附上的演示设计一样
- reactjs - 我不想让未定义的值传递给组件
- apache-spark - 在 BigQuery 中,每 6 个字符将列拆分为行
- c++ - 带有 enable_if 的模板类之外的方法
- java - JavaFX jfoenix 运行时错误 (JFXDatePicker)
- javascript - 如何在构建时显示所需的 proptype 错误?
- node.js - 在 PGadmin 上删除表后,如何让纱线迁移工作?
- azure - 按触发时间排列的 Azure 逻辑应用列表
- mongodb - 在 mongoDB 中使用空值查询 $and