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?

AWS API JavaScript SDK CORS 错误

Javascript || AWS S3 SDK &croppie 文件上传错误