扫描DynamoDB表时出错

时间:2016-08-22 17:08:53

标签: node.js amazon-web-services amazon-dynamodb

我有以下代码扫描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();

1 个答案:

答案 0 :(得分:1)

the documentation

  

如果扫描的项目总数超过最大数据集大小   限制为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);
});