【问题标题】:AWS Lambda scanning a dynamoDB tableAWS Lambda 扫描 dynamoDB 表
【发布时间】:2016-10-16 21:28:42
【问题描述】:

我正在尝试扫描 dynamodb 表以查找价格在 1 到 13 之间的所有条目,

    var AWS = require('aws-sdk');
var db = new AWS.DynamoDB();


exports.handler = function(event, context) {

  var params = {
    TableName: "hexagon2",
    ProjectionExpression: "price", 
    FilterExpression: "price between :lower and :higher",
    ExpressionAttributeValues: {
     ":lower": {"N": "1"},
     ":higher": {"N": "13"}
    }
};

  db.scan(params, function(err, data) {
    if (err) {
      console.log(err); // an error occurred
      } 
    else {
      console.log(data.Item); // successful response
      context.done(null,{"Result": "Operation succeeded."});
      }
  });
};

但是当我测试它时,我总是收到以下错误。我的表中肯定有“价格”作为数字属性,并且 IAM 也已设置。

START RequestId: f770c78b-93a1-11e6-b5f6-e5c31cef8b2d Version: $LATEST
2016-10-16T13:10:54.299Z    f770c78b-93a1-11e6-b5f6-e5c31cef8b2d    undefined
END RequestId: f770c78b-93a1-11e6-b5f6-e5c31cef8b2d
REPORT RequestId: f770c78b-93a1-11e6-b5f6-e5c31cef8b2d  Duration: 912.58 ms Billed Duration: 1000 ms    Memory Size: 128 MB Max Memory Used: 24 MB  

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb aws-lambda


    【解决方案1】:

    您正在尝试引用data.Item,即undefined。扫描操作返回一个列表,而不是单个项目。该列表将通过data.Items

    引用

    如有疑问,请阅读the documentation。或者您可以打印出整个 data 响应以查看返回的响应的确切格式。

    【讨论】:

    • 返回[ { price: { N: '12' } }, { price: { N: '10' } } ](这是符合条件的两个项目的价格,而不是带有名称的整个项目等。为什么即使它得到整个data.Items,它也会这样做?
    • 使用 DynamoDB,您必须告诉它您想要返回的属性。如果您想要返回所有属性,您需要将Select: "ALL_ATTRIBUTES" 添加到您的params 对象中。这一切都在文档中明确说明。我真的建议你阅读文档。至少你应该去这里docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/… 并查看query 函数采用的所有参数以及每个参数的作用。
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多