2016-06-14 18 views
0
私は9と13私のコードの間で価格のレコードを取得するために、DynamoDBのをスキャンする

AWSラムダスキャンDynamoDBの

  • InvalidParameterType:私は2個のエラーを持っている

    ar AWS = require('aws-sdk'); 
    var db = new AWS.DynamoDB(); 
    
    
    exports.handler = function(event, context) { 
    
        var params = { 
        TableName: "StreamsLambdaTable", 
        ProjectionExpression: "price", //specifies the attributes you want in the scan result. 
        FilterExpression: "price between :lower and :higher", 
        // ExpressionAttributeNames: { 
        //  "#yr": "year", 
        // }, 
        ExpressionAttributeValues: { 
         ":lower": 9, 
         ":higher": {"N": 13} 
        } 
    }; 
    
        db.scan(params, function(err, data) { 
        if (err) { 
         console.log(err); // an error occurred 
         } 
        else { 
         console.log(data.Item.name.S); // successful response 
         context.done(null,{"Result": "Operation succeeded."}); 
         //res.send(data.name); 
         } 
        // return next(); 
        }); 
    }; 
    

    しかし、期待のparams .ExpressionAttributeValues [ '下部']構造

  • InvalidParameterTypeすべき:期待params.ExpressionAttributeValues [ ':高く']。N列すべき]

は、私はあなたのコード内で見ることができるように:)(2つのdifffrentアプローチを試してみました

ExpressionAttributeValues: { 
     ":lower": 9, 
     ":higher": {"N": 13} 
    } 

が、それらのどちらも動作します。

編集:

もう1つ問題があります。私はそれらすべての価格を手に入れたい。私は、そのコードを試してみました:

data.Items.forEach(function(record) { 
      console.log(
       record.price + " dadada"); 
     }); 

しかし、私は得る:

2016-06-14T20:33:23.915Z 3ce248c7-326f-11e6-855c-57839aedb817 [object Object] dadada 
2016-06-14T20:33:23.915Z 3ce248c7-326f-11e6-855c-57839aedb817 [object Object] dadada 

EDIT 2:

Soolved。 record.priceをrecord.price.Nに変更しました。

+0

構文:higher'は正しいです。あなたが受け取っているエラーメッセージは、 'price'があなたのテーブルに文字列として格納されていて、期待通りの数字ではないことを示唆しています。 – chukkwagon

+0

@chukkwagon実際には構文が正しくなく、文字列として格納されていません。値を文字列として渡し、数値であることをDynamoDBに示す "N"でタイプを指定します。 –

+0

@マークB - あなたが正しいです、彼の元の投稿の13周り。 – chukkwagon

答えて

2

エラーメッセージは、何が間違っているかを正確に示しています。それはあなたが":higher"に提供してきたばかりのような構造であることを「":lowerを期待し、それが":higher"の値が文字列であることを想定していそうのように:あなたは `のために使用

ExpressionAttributeValues: { 
    ":lower": {"N": "9"}, 
    ":higher": {"N": "13"} 
} 
+0

それは働いた。それは文字列だった。ありがとうございました –

+0

いいえ、 "N"は、DynamoDBが数値を数値として扱うことを指定します。 –