Dynamodb mendapatkan sekitar 10.000 hingga 30.000 catatan 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;
}

dengan kode ini, saya tidak mendapatkan hasil apa pun dan hasil dari id itu berisi hampir 20.000 hingga 30.000 catatan. Saya ingin mengambil semua catatan itu tetapi tidak mencatat apa pun di konsol aws. Tolong bantu saya untuk mencari tahu


person Aditya Sharma    schedule 08.12.2018    source sumber
comment
Ini akan membantu membersihkan kode Anda, sulit dibaca sekarang. Mulailah dengan membuat indentasi dan meletakkan pada satu baris kode yang seharusnya berada pada satu baris.   -  person Costin    schedule 10.12.2018


Jawaban (1)


Tidak yakin itu solusinya, tapi saya akan mencoba memasukkan results sebelum memanggil permintaan baru:

} else if (data.LastEvaluatedKey) {
    // save items
    data.Items.forEach(function (item) { results.push(item); });        
    params.ExclusiveStartKey = data.LastEvaluatedKey;
    docclient.query(params, callback);
}

Saran: pertimbangkan untuk menggunakan janji, janji itu lebih mudah untuk dikerjakan. Kode Anda adalah "panggilan balik neraka" :)

person Costin    schedule 09.12.2018
comment
Gunakan lebih banyak. Yang saya lihat hanyalah fungsi callback :) - person Costin; 10.12.2018
comment
dapatkah Anda memiliki kode janji saya ingin mengimplementasikan fungsionalitas di mana akan ada Foreach di mana satu per satu saya ingin mengambil semua catatan dan menghentikan loop sampai semua data dari satu id berasal dari dynamodb datang. Jika Anda bisa tolong bantu - person Aditya Sharma; 10.12.2018