1

私のアプリケーションでは、Amazon WebサービスdynamoDBでnode.jsを使用しています。すでに1つのテーブルを作成し、その上にアイテムを挿入しています。次に、describeTableを使用してテーブルのアイテム数を表示したいと思います。どうすればよいですか。以下を試してみました。コードですが、機能していません。

     var AWS = require('aws-sdk');
     AWS.config.update({accessKeyId: '****', secretAccessKey:  '****',region: 'us-east-1'});
     var svc = new AWS.DynamoDB();
     svc.client.describeTable({TableName:"Users"}, function(err,result) {
     if(!err){

        console.log('result is '+result[ItemCount]);
         console.log('success');
     }
   else{

    console.log("err is "+err);
    }
   });
4

3 に答える 3

3

あなたの質問に対する直接の答えは、コールバック関数で result.ItemCount の代わりに result.Table.ItemCount を使用する必要があるということです。ただし、このカウントはリアルタイムで更新されず、テーブルへの最近の挿入または削除を反映していない可能性があることに注意してください。現在の項目数が必要な場合は、テーブルをスキャンし、Count プロパティを使用してスキャンされた項目の数を取得する必要があります。このようなスキャンは、テーブルにプロビジョニングされたすべての容量を消費する可能性があるため、これが要件である場合は、テーブルで同時に実行されている可能性のある他の操作と、最新の項目数の必要性とのバランスを取るようにしてください。

アイテム数を返すスキャンの node.js サンプルを次に示します。scan はすべての行が読み取られるまで繰り返し呼び出されるため、非同期モジュールを使用して、次のループを発行する前に結果を待ちます。

var async = require('async');
var AWS = require('aws-sdk');

AWS.config.update({accessKeyId: 'AKID',
                   secretAccessKey:  'secret',
                   region: 'us-east-1'});
var svc = new AWS.DynamoDB();

var scanComplete = false,
    itemCountTotal = 0,
    consumedCapacityUnitsTotal = 0;

var scanParams = { TableName : 'usertable',
                   Count : 'true' };

// scan is called iteratively until all rows have been scanned
//  this uses the asyc module to wait for each call to complete
//  before issuing the next.
async.until( function() { return scanComplete; },
             function (callback) {
                svc.scan(scanParams, function (err, result) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log(result);
                        if (typeof (result.LastEvaluatedKey) === 'undefined' ) {
                            scanComplete = true;
                        } else {
                            // set the start key for the next scan to our last key
                            scanParams.ExclusiveStartKey = result.LastEvaluatedKey;
                        }
                        itemCountTotal += result.Count;
                        consumedCapacityUnitsTotal += result.ConsumedCapacityUnits;
                        if (!scanComplete) {
                            console.log("cumulative itemCount " + itemCountTotal);
                            console.log("cumulative capacity units " + consumedCapacityUnitsTotal);
                        }
                    }
                    callback(err);
                });
             },
             // this runs when the loop is complete or returns an error
             function (err) {
                if (err) {
                    console.log('error in processing scan ');
                    console.log(err);
                } else {
                    console.log('scan complete')
                    console.log('Total items: ' + itemCountTotal);
                    console.log('Total capacity units consumed: ' + consumedCapacityUnitsTotal);
                }
             }
);
于 2013-03-22T19:30:49.127 に答える
3

svc の後にクライアントを削除します。ドキュメンテーション

var svc = new AWS.DynamoDB();
svc.describeTable(params, function(err, data) {
    if (err) {
       // error
    } else {
        var table = data['Table'];
        console.log(table['ItemCount']);
    }
});

これは私にとってはうまくいきました。

于 2016-05-31T09:43:30.587 に答える