12

Node JS AWS-SDK を使用して DynamoDB テーブルから項目を取得しようとしています。機能getItemは問題なく動作していますがBatchGetItem、使いにくいです。

公式ドキュメントを使用します: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/Client.html#batchGetItem-property

この関数を正しく使用する方法の例を探していますが、見つかりません。私が書いたコードは次のとおりです。

var params = {

"RequestItems" : {
    "Keys" : [
      {"HashKeyElement" : { "N" : "1000" } },
      {"HashKeyElement" : { "N" : "1001" } }
    ]
  }
}

db.client.batchGetItem(params, function(err, data) {
  console.log('error: '+ err);
  console.log(jsDump.parse(data));
});

エラーが発生しSerializationException: Start of list found where not expectedますが、NodeJS と JSON の専門知識に関する限り、私の構文は正しいです。しかし、それは紛らわしいです: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API_BatchGetItems.html

その構文例では、テーブル名を指定する必要があります。

4

7 に答える 7

14

私はdynamo dbクライアントバージョンを使用しました... 1時間の調査の後、なんとか機能させることができました...

var params = {

RequestItems: { // map of TableName to list of Key to get from each table
    Music: {
        Keys: [ // a list of primary key value maps
            {
                Artist: 'No One You Know',
                SongTitle:'Call Me Today'
                // ... more key attributes, if the primary key is hash/range
            },
            // ... more keys to get from this table ...
        ],
        AttributesToGet: [ // option (attributes to retrieve from this table)
            'AlbumTitle',
            // ... more attribute names ...
        ],
        ConsistentRead: false, // optional (true | false)
    },
    // ... more tables and keys ...
},
ReturnConsumedCapacity: 'NONE', // optional (NONE | TOTAL | INDEXES)
};
docClient.batchGet(params, function(err, data) {
    if (err) ppJson(err); // an error occurred
    else ppJson(data); // successful response

});
于 2016-05-28T23:06:34.217 に答える
8

私はあなたの痛みを感じます... AWS のドキュメントはせいぜい紛らわしいです。老朽化したインフラストラクチャと不適切なテクニカル ライティングが原因だと思います。SDK で使用される nodejs および JSON 構文は、XML 構造を思い出させます。

とにかく、私は 1 時間後に BatchGetItem を機能させることができました。パラメータは次のようになります。

{
    "RequestItems": {
        "<TableName>": {
            "Keys": [
                {"<HashKeyName>": {"<type>":"<hash key value>"}},
                {"<HashKeyName>": {"<type>":"<hash key value>"}},
                {"<HashKeyName>": {"<type>":"<hash key value>"}}
            ]
        }
    }
}
于 2014-02-15T00:14:03.577 に答える
3

テーブル名が欠落していると思います。あなたはこれを求めている:

var params = {

"RequestItems" : {
    "TableName": {
      "Keys" : [
        {"HashKeyElement" : { "N" : "1000" } },
        {"HashKeyElement" : { "N" : "1001" } }
      ]
    }
  }
}
于 2013-05-10T00:27:01.837 に答える
0

あなたの場合、正しい答えは次のようになります。

var params = {
    "RequestItems": {
        "<table_name>": {
           "Keys": [
                {"HashKeyElement" : { "N" : "1000" } },
                {"HashKeyElement" : { "N" : "1001" } }
           ]
       }
    }
}
于 2014-01-13T01:24:16.420 に答える
0

これを試して:

db.client.batchGetItem(
{"RequestItems":{
     "TableName":{
           "Keys":[
               {"HashKeyElement"  : {"N":"1000"}},
               {"HashKeyElement"  : {"N":"1001"}}
           ]
       }
    }
}, function(err, result){ //handle error and result here  });
于 2013-06-28T10:58:30.423 に答える