AWS SDK JavaScript v3 / 如何在 dynamoDB 扫描命令中使用 ExpressionAttributeNames?
Posted
技术标签:
【中文标题】AWS SDK JavaScript v3 / 如何在 dynamoDB 扫描命令中使用 ExpressionAttributeNames?【英文标题】:AWS SDK JavaScript v3 / How to use ExpressionAttributeNames within dynamoDB Scan Command? 【发布时间】:2022-01-17 16:43:10 【问题描述】:我正在使用 Lambda 函数从 dynamoDB 表中的用户 ID 获取用户电子邮件。我使用 dynamoDB 扫描命令扫描 dynamoDB 表中的所有项目。我使用新的 v3 AWS JS SDK。
问题:为什么 ExpressionAttributeNames 在我的情况下不能正常工作?
这行得通:
const params =
FilterExpression: "user_info.user_id = :userid",
ExpressionAttributeValues:
":userid": S: user_id
,
ProjectionExpression: "user_email",
TableName: aws_table,
但这不起作用,为什么?
const params =
FilterExpression: "#xyz = :userid",
ExpressionAttributeNames:
"#xyz": "user_info.user_id" // <- filter does not work like this (returns 0 findings)
,
ExpressionAttributeValues:
":userid": S: user_id
,
ProjectionExpression: "user_email",
TableName: aws_table,
;
我的 Lambda 扫描操作代码本身看起来像:
const DynamoDBClient = require("@aws-sdk/client-dynamodb");
const ScanCommand = require("@aws-sdk/client-dynamodb");
const ddbClient = new DynamoDBClient( region: aws_region );
...
const run = async () =>
try
const data = await ddbClient.send(new ScanCommand(params));
data.Items.forEach(function (element, index, array)
console.log(element);
);
return data;
catch (err)
console.log("Error", err);
await run();
npm i @aws-sdk/client-dynamodb
文档:
https://docs.aws.amazon.com/AWSjavascriptSDK/v3/latest/clients/client-dynamodb/interfaces/scancommandinput.html#expressionattributenames
【问题讨论】:
【参考方案1】:这是expected behaviour:
DynamoDB 将表达式属性名称中的点解释为属性名称中的字符
// use multiple expression attribute names if you need a dynamic path:
FilterExpression: "#user_info.#user_id = :userid"
【讨论】:
以上是关于AWS SDK JavaScript v3 / 如何在 dynamoDB 扫描命令中使用 ExpressionAttributeNames?的主要内容,如果未能解决你的问题,请参考以下文章
使用 aws-sdk-v1 从 ruby 脚本中的 AWS SSM Parameter Store 获取数据
AWS SDK JavaScript:如何显示 AWS.S3.putObject 的上传进度?
使用 aws sdk javascript 禁用 dynamodb 流
如何在 lambda 函数中包含 javascript aws-sdk?