AWS Lambda扫描dynamoDB

时间:2016-06-14 20:09:01

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

我想扫描DynamoDB以获取价格在9到13之间的记录。我的代码:

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();
  });
};

但我有2个错误:

  • InvalidParameterType:预期params.ExpressionAttributeValues [':lower']为结构
  • InvalidParameterType:Expected params.ExpressionAttributeValues [':higher']。N为字符串]

我尝试了两种不同的方法(正如你在代码中看到的那样):

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

但它们都不起作用。

编辑:

我还有另外一个问题。我想得到所有这些价格。我尝试使用该代码:

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

编辑2:

Soolved。刚刚将record.price更改为record.price.N

1 个答案:

答案 0 :(得分:2)

错误消息告诉您到底出了什么问题。它希望":lower“成为一个结构,就像你提供给":higher"一样,它希望":higher"的值是一个字符串。就像这样:

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