查询和扫描 DynamoDB 表 - AWS SDK for JavaScript

我们已宣布即将终止对 AWS SDK for JavaScript v2 的支持。建议您迁移到 AWS SDK for JavaScript v3。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

查询和扫描 DynamoDB 表

JavaScript code example that applies to Node.js execution

此 Node.js 代码示例演示:

  • 如何查询和扫描 DynamoDB 表的项目。

情景

仅使用主键属性值查找表或二级索引中的项目。您必须提供分区键名称和要搜索的值。您还可提供排序键名称和值,并使用比较运算符来优化搜索结果。扫描操作通过检查指定表中的每个项目来查找项目。

在本示例中,您使用一系列 Node.js 模块来标识要从 DynamoDB 表中检索的一个或多个项目。代码使用 SDK for JavaScript,通过 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 上的此处找到。