我有以下代码扫描DynamoDB表并返回具有键值test = true
的人数。出于某种原因,此代码不扫描整个表。有谁知道为什么?
var aws = require('aws-sdk');
var config = require('./config.js');
aws.config.update({accessKeyId: config.key, secretAccessKey: config.secret});
aws.config.update({region: 'us-east-1'});
function getItems() {
var db = new aws.DynamoDB.DocumentClient();
db.scan({
TableName : config.db,
}, function(err, data) {
if (err) { console.log(err); return; }
var count = 0;
for (var ii in data.Items) {
ii = data.Items[ii];
if (ii.setRemoveBrandingEmailOptin) {
console.log(ii.test);
count += 1;
}
}
console.log(count);
});
}
getItems();
答案 0 :(得分:1)
如果扫描的项目总数超过最大数据集大小 限制为1 MB,扫描停止,结果返回给用户 一个LastEvaluatedKey值,用于在后续步骤中继续扫描 操作。结果还包括超过的项目数量 限制。
无论如何,您不需要将整个表转储到应用程序中以进行简单计数。你是以最低效的方式做到这一点的。尝试这样的事情:
db.scan({
TableName : config.db,
Select: 'COUNT',
FilterExpression: "#emailOptInField = :emailOptInValue",
ExpressionAttributeNames: {
"#emailOptInField": "setRemoveBrandingEmailOptin",
},
ExpressionAttributeValues: {
":emailOptInValue": true
}
}, function(err, data) {
if (err) { console.log(err); return; }
var count = data.Count;
console.log(count);
});