【问题标题】:AWS Lambda scanning dynamoDBAWS Lambda 扫描 dynamoDB
【发布时间】:2016-10-15 17:27:52
【问题描述】:

我想扫描 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:预期 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:

解决了。只是将 record.price 更改为 record.price.N

【问题讨论】:

  • 您用于:higher 的语法是正确的。您收到的错误消息表明 price 在您的表中存储为字符串,而不是您期望的数字。可以分享一下你的表结构吗?
  • @chukkwagon 语法实际上不正确,并且该值未存储为字符串。您将值作为字符串传递,并使用“N”指定类型,向 DynamoDB 指示它是一个数字。
  • @MarkB - 啊,你是对的,错过了他没有在原始帖子中的 13 周围加上引号。

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


【解决方案1】:

错误消息准确地告诉您出了什么问题。它期望":lower" 是一个结构,就像你提供给":higher" 一样,它期望":higher" 的值是一个字符串。像这样:

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

【讨论】:

  • 成功了。我确信价格被设置为一个数字,但它是一个字符串。谢谢
  • 不,“N”指定 DynamoDB 将值视为数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多