加载数据后,您可以使用 Data API 执行比上一个模块中执行的 Select 1 查询更复杂的操作。
常见的访问模式是为用户获取最高分数。您可以在此处尝试。
查看 scripts/fetchHighScoresForUser.js 中的代码。此代码包含应用程序调用以获取特定用户最高分数的内部方法。代码如下所示:
const AWS = require('aws-sdk')
const rdsdataservice = new AWS.RDSDataService();
const fetchHighScoresForUser= async (username, count) => {
const params = {
resourceArn: process.env.DATABASE_ARN,
secretArn: process.env.SECRET_ARN,
database: 'leaderboard',
includeResultMetadata: true,
sql: 'SELECT game_id, username, gamedate, score, level FROM games WHERE username = :username ORDER BY score DESC LIMIT :count',
parameters: [
{
name: 'username',
value: { stringValue: username }
},
{
name: 'count',
value: { longValue: count }
}
]
}
const results = await rdsdataservice.executeStatement(params).promise()
return results
}
fetchHighScoresForUser(ubecker, 1).then((results) => console.log(JSON.stringify(results, null, 2)))
您的 fetchHighScoresForUser 函数采用两个参数:要为之获取高分的用户名和要获取的记录数。然后,它使用数据 API 进行查询,以获取该用户的最高分数。
文件底部是一个使用 fetchHighScoresForUser 函数的示例,方法是使用用户名 ubecker 调用该函数,并仅请求一条记录。
通过在终端中运行以下命令来执行此脚本:
{
"columnMetadata": [
{
"arrayBaseColumnType": 0,
"isAutoIncrement": true,
"isCaseSensitive": false,
"isCurrency": false,
"isSigned": true,
"label": "game_id",
"name": "game_id",
"nullable": 0,
"precision": 11,
"scale": 0,
"schemaName": "",
"tableName": "games",
"type": 4,
"typeName": "INT"
},
{
"arrayBaseColumnType": 0,
"isAutoIncrement": false,
"isCaseSensitive": false,
"isCurrency": false,
"isSigned": false,
"label": "username",
"name": "username",
"nullable": 0,
"precision": 50,
"scale": 0,
"schemaName": "",
"tableName": "games",
"type": 12,
"typeName": "VARCHAR"
},
{
"arrayBaseColumnType": 0,
"isAutoIncrement": false,
"isCaseSensitive": false,
"isCurrency": false,
"isSigned": false,
"label": "gamedate",
"name": "gamedate",
"nullable": 0,
"precision": 19,
"scale": 0,
"schemaName": "",
"tableName": "games",
"type": 93,
"typeName": "TIMESTAMP"
},
{
"arrayBaseColumnType": 0,
"isAutoIncrement": false,
"isCaseSensitive": false,
"isCurrency": false,
"isSigned": true,
"label": "score",
"name": "score",
"nullable": 0,
"precision": 11,
"scale": 0,
"schemaName": "",
"tableName": "games",
"type": 4,
"typeName": "INT"
},
{
"arrayBaseColumnType": 0,
"isAutoIncrement": false,
"isCaseSensitive": false,
"isCurrency": false,
"isSigned": true,
"label": "level",
"name": "level",
"nullable": 0,
"precision": 11,
"scale": 0,
"schemaName": "",
"tableName": "games",
"type": 4,
"typeName": "INT"
}
],
"numberOfRecordsUpdated": 0,
"records": [
[
{
"longValue": 101
},
{
"stringValue": "ubecker"
},
{
"stringValue": "2019-11-06 09:00:37"
},
{
"longValue": 9090
},
{
"longValue": 84
}
]
]
}
此输出非常详细。Data API 包含有关结果的大量信息,包括返回的每列的详细列元数据。
在每个数据访问方法中,此信息可能难以解析。在下一步中,您将使用实用方法来打包 Data API。