javascript - 使用保留关键字作为 FilterExpression NodeJS 扫描 DynamoDB 中的函数

标签 javascript node.js amazon-web-services amazon-dynamodb

我的扫描功能:

var tableName = 'faasos_orders',
    filterExp = 'status = :delivered OR status = :void OR status = :bad',
    projectionValues = '',
    expressionAttr = {};    
    expressionAttr[":delivered"] = "delivered";
    expressionAttr[":bad"] = "bad";
    expressionAttr[":void"] = "void"; 
    limit = 10;
  dynamoConnector.getItemUsingScan(tableName, filterExp, projectionValues, expressionAttr, function (err, data) {  ...........} 

运行时出错:

    { [ValidationException: Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status]
  message: 'Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status',
  code: 'ValidationException',
  time: Mon Apr 18 2016 21:57:30 GMT+0530 (IST),
  requestId: 'AV6QFHM7SPQT1QR3D4OO81ED4FVV4KQNSO5AEMVJF66Q9ASUAAJG',
  statusCode: 400,
  retryable: false,
  retryDelay: 0 }

现在我确实明白了我试图在 th 中使用保留关键字 e filterExpression 这是非法的。 但是,如果我通过 aws gui 运行相同的函数,它会漂亮地返回数据(查看图片了解详细信息): Scan function on status through gui

所以问题是如何通过 Node 添加过滤器表达式而无需更改键名???

最佳答案

已解决:

aws-sdk 有两个参数:

表达式属性名称

表达式属性值

两者都提供替换属性列表中使用的占位符的功能。 这里的属性有点模棱两可,我感到困惑。 aws 上的向导在使用术语属性时同时表示键和值。

因此,如果您想使用保留关键字作为关键属性,请使用带有#(磅)的表达式属性名称参数来表示占位符。

类似地,如果您想为值属性使用占位符,请使用带有 :(冒号)的表达式属性值参数来表示占位符。

所以最后我的代码(工作)看起来像这样:

var param = {
  TableName: "faasos_orders",
  FilterExpression: "#order_status = :delivered OR #order_status = :void OR #order_status = :bad",
  ExpressionAttributeValues: {
    ":delivered": "delivered",
    ":void": "void",
    ":bad": "bad"
  },
  ExpressionAttributeNames: {
    "#order_status": "status"
  }
};  
  dynamodb.scan(param, function (err, data) {....});

关于javascript - 使用保留关键字作为 FilterExpression NodeJS 扫描 DynamoDB 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698945/

相关文章:

javascript - AWS websocket 服务器 : 403 error when connecting from browser, 来自 Python

javascript - 如何让 Protractor 等待 webpack-dev-server 启动?

node.js - Nightmare then() 在评估()之后立即调用

javascript - 如何在构造函数中执行异步函数?

amazon-ec2 - 文件是否保存在 EBS 卷上?他们不应该被拯救吗?我很困惑

amazon-web-services - 如何在 Redshift 中生成 12 位唯一数字?

amazon-web-services - AWS Glue 在顺序运行时输出空文件

javascript - 如何动态更改 HTML 表格行中的可点击图像?

javascript - 为什么 process.__proto__ !== process.constructor.prototype ?

javascript - 用特定字符串替换所有左边的空格