使用 Lambda 的 DynamoDB 扫描不返回元素

DynamoDB Scan with Lambda not returning elements

我有一个具有以下代码的 Lambda:

// Load the AWS SDK for Node.js.
var AWS = require("aws-sdk");
// Set the AWS Region.
AWS.config.update({ region: "us-east-2" });

 
exports.handler =  function(event, context, callback) {
    // Create DynamoDB service object.
    var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });
    
    var params = {
       TableName: "Ranking",
       ProjectionExpression: "#username, Score, Duration",
       FilterExpression: "#username = :username",
       ExpressionAttributeNames: {
          "#username": "Username",
       },
       ExpressionAttributeValues: {
            ":username": {
               S: 'Alberto'
            },
       }
    };
    
    
    
    let toReturn = [];
    ddb.scan(params, function (err, data) {
      if (err) {
        toReturn = err
      } else {
        toReturn = data.Items;
      }
    });
    let response = {
        statusCode: 200,
        body: JSON.stringify(toReturn)
    };
    callback(null, response)
};

但是我总是看到 [] 作为回应...

我当前的数据库有以下记录:

所以我的问题是...为什么我没有取回那件物品?

由于您正在使用回调,因此您的代码应如下所示。另外Duration是保留关键字,所以也需要修改如下:

// Load the AWS SDK for Node.js.
var AWS = require("aws-sdk");
// Set the AWS Region.
AWS.config.update({ region: "us-east-2" });
 
exports.handler =  function(event, context, callback) {
    // Create DynamoDB service object.
    var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" });

    var params = {
      TableName: "Ranking",
      FilterExpression: "#username = :username",
      ProjectionExpression: "#username, Score, #duration",
      ExpressionAttributeNames: {
          "#username": "Username",
          "#duration": "Duration",          
      },
      ExpressionAttributeValues: {
            ":username": {
              S: 'Alberto'
            },
      }
    };    
    
    ddb.scan(params, function (err, data) {
      if (err) {
        callback(null,  err)  
      } else {
        callback(null,  data.Items)  
      }
    });

};