我们已宣布
查询和扫描 DynamoDB 表
此 Node.js 代码示例演示:
如何查询和扫描 DynamoDB 表的项目。
情景
仅使用主键属性值查找表或二级索引中的项目。您必须提供分区键名称和要搜索的值。您还可提供排序键名称和值,并使用比较运算符来优化搜索结果。扫描操作通过检查指定表中的每个项目来查找项目。
在本示例中,您使用一系列 Node.js 模块来标识要从 DynamoDB 表中检索的一个或多个项目。代码使用 SDK for JavaScript,通过 DynamoDB 客户端类的以下方法来查询和扫描表:
先决条件任务
要设置和运行此示例,请先完成以下任务:
安装 Node.js。有关更多信息,请参阅 Node.js
网站。 使用用户凭证创建共享配置文件。有关提供共享凭证文件的更多信息,请参阅从共享凭证文件加载 Node.js 中的凭证。
创建一个您可以访问其项目的 DynamoDB 表。有关创建 DynamoDB 表的更多信息,请参阅在 DynamoDB 中创建和使用表。
查询表
此示例查询包含有关视频系列的剧集信息的表,返回第二季第九集之后,字幕中包含指定短语的每集的名称和字幕。
创建文件名为 ddb_query.js
的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 DynamoDB,请创建一个 AWS.DynamoDB
服务对象。创建一个 JSON 对象,其中包含查询表所需的参数,在本示例中包括表名,查询所需的 ExpressionAttributeValues
,使用这些值定义查询要返回的项目的 KeyConditionExpression
,以及各个项目要返回的属性值的名称。调用 DynamoDB 服务对象的 query
方法。
// Load the AWS SDK for Node.js var AWS = require("aws-sdk"); // Set the region AWS.config.update({ region: "REGION" }); // Create DynamoDB service object var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" }); var params = { ExpressionAttributeValues: { ":s": { N: "2" }, ":e": { N: "09" }, ":topic": { S: "PHRASE" }, }, KeyConditionExpression: "Season = :s and Episode > :e", ProjectionExpression: "Episode, Title, Subtitle", FilterExpression: "contains (Subtitle, :topic)", TableName: "EPISODES_TABLE", }; ddb.query(params, function (err, data) { if (err) { console.log("Error", err); } else { //console.log("Success", data.Items); data.Items.forEach(function (element, index, array) { console.log(element.Title.S + " (" + element.Subtitle.S + ")"); }); } });
要运行示例,请在命令行中键入以下内容。
node ddb_query.js
此示例代码可在 GitHub 上的此处
扫描表
创建文件名为 ddb_scan.js
的 Node.js 模块。请确保按前面所示配置开发工具包。要访问 DynamoDB,请创建一个 AWS.DynamoDB
服务对象。创建一个 JSON 对象,其中包含扫描表中项目所需的参数,在本示例中包括表的名称,各个匹配项目要返回的属性值的列表,以及用于筛选结果集来查找包含指定短语的项目的表达式。调用 DynamoDB 服务对象的 scan
方法。
// Load the AWS SDK for Node.js. var AWS = require("aws-sdk"); // Set the AWS Region. AWS.config.update({ region: "REGION" }); // Create DynamoDB service object. var ddb = new AWS.DynamoDB({ apiVersion: "2012-08-10" }); const params = { // Specify which items in the results are returned. FilterExpression: "Subtitle = :topic AND Season = :s AND Episode = :e", // Define the expression attribute value, which are substitutes for the values you want to compare. ExpressionAttributeValues: { ":topic": { S: "SubTitle2" }, ":s": { N: 1 }, ":e": { N: 2 }, }, // Set the projection expression, which are the attributes that you want. ProjectionExpression: "Season, Episode, Title, Subtitle", TableName: "EPISODES_TABLE", }; ddb.scan(params, function (err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data); data.Items.forEach(function (element, index, array) { console.log( "printing", element.Title.S + " (" + element.Subtitle.S + ")" ); }); } });
要运行示例,请在命令行中键入以下内容。
node ddb_scan.js
此示例代码可在 GitHub 上的此处