DynamoDB:查询总是返回 null

DynamoDB : Query always returning null

我是 DynamoDB 的新手,我只是创建了一个 table,我在其中插入了一些虚拟行,只是为了测试读/写功能。

这是我的数据。

我创建了一个 Lambda 来访问这些数据,通过 Partition Key ok Sort Key 但我每次都得到一个 null return :'(

这是我的 lambda 代码:

    const dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10', region: 'eu-west-1'});

exports.handler = async (event,context,callback) => {
    var params = {
        TableName : "DontMissAPlaceTable",
        KeyConditionExpression: "Partition_Key = :id",
        ExpressionAttributeValues: {
            ":id": {"S" :  "media_001"}
        }
    };
    dynamodb.query(params, function(err, data) {
        if (err) {
            console.log(err, err.stack);
            callback(null, {
                statusCode: '500',
                body: err
            });
        } else {
            console.log(data)
            callback(null, {
                statusCode: '200',
                body: data
            });
        }
    })

};

我最初以为是无法访问 table,但似乎我拥有正确的权限。

我很确定这是一个虚拟问题,但我无法弄清楚...

感谢帮助:D

您的 Lambda 函数是 async,但您的代码使用回调。到达回调时,您的函数已经终止,因为它 运行 是异步的。

与其使用过时的、令人困惑的回调方法,不如坚持使用 async/await。 Node.js 的 AWS 开发工具包已经提供了一个 .promise() 方法,您可以调用使用回调的异步方法,使其与 await 无缝连接。

就是说,将您的代码更改为:

const dynamodb = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10', region: 'eu-west-1'});

exports.handler = async (event) => {
    const params = {
        TableName : "DontMissAPlaceTable",
        KeyConditionExpression: "Partition_Key = :id",
        ExpressionAttributeValues: {
            ":id": "media_001"
        }
    };
    return {
      statusCode: 200,
      body: JSON.stringify(await dynamodb.query(params).promise())
    }

};

由于您已经在使用DocumentClient API,因此在查询时无需指定类型("S"、"N"等)。

此外,请确保 Partition_Key 确实是 您的 分区键。您使用您在 table 中定义的名称,而不是 HashKeyPartitionKey,这意味着如果您调用哈希键 id,则应使用 id