首页 > 解决方案 > 从 AWS.DynamoDB.DocumentClient.Scan() 调用返回输出

问题描述

我有一个函数可以返回 DynamoDB 表(事物)中的记录数:

const table = 'Things';
const region = 'us-east-1';
const profile = 'development';

process.env.AWS_SDK_LOAD_CONFIG = true;
process.env.AWS_PROFILE = profile;

const AWS = require('aws-sdk');
AWS.config.update({ region: region });

function ddb_table_has_records(table_name) {
    const ddb_client = new AWS.DynamoDB.DocumentClient();

    const ddb_query_parameters = {
        TableName: table_name,
        Select: 'COUNT'
    }

    const results = ddb_client.scan(ddb_query_parameters).promise();

    results.then((data) => {
        console.log(data.Count);
        return data;
    }).catch((err) => {
        console.log("Error: ", err);
    })
}

console.log(ddb_table_has_records(table));

当我运行此代码时,我得到以下...

PS C:\> node .\get-count-thing.js
undefined
3951

我没有从以下扫描中捕获数据;虽然,我在 console.log() 调用中看到了它:

console.log(ddb_table_has_records(table));

我在搞什么鬼?

标签: javascriptnode.jsamazon-web-servicesamazon-dynamodb

解决方案


发布我的修复以防万一有人有同样的问题。我必须进行两项更改才能从表中检索项目;我需要...

  1. ...项目ALL_ATTRIBUTES
  2. ...迭代返回的项目集合

以下是我的更改功能:

function ddb_table_has_records(table_name) {
    const ddb_client = new AWS.DynamoDB.DocumentClient();

    const ddb_query_parameters = {
        TableName: table_name,
        Select: 'ALL_ATTRIBUTES'
    }

    const results = ddb_client.scan(ddb_query_parameters).promise();

    results.then((data) => {
        console.log(data.Count);

        data.Items.forEach((thing) => {
            console.log(thing);
        });

    }).catch((err) => {
        console.log("Error: ", err);
    })
}

推荐阅读