DynamoDB中的扫描函数,保留关键字为FilterExpression NodeJS

Scan Function in DynamoDB with reserved keyword as FilterExpression NodeJS

本文关键字:关键字 FilterExpression NodeJS 保留 扫描 函数 DynamoDB      更新时间:2023-09-26

我的扫描功能:

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 }

现在我明白了,我正试图在e filterExpression,它是非法的。但是,如果我通过awsgui运行相同的函数,它会漂亮地返回数据(查看图片了解详细信息):通过gui 扫描状态功能

所以问题是,我如何通过节点添加过滤器表达式而不必更改密钥名称???

已解决:

aws-sdk有两个参数:

表达式属性名称

表达式属性值

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

因此,如果要使用保留关键字作为关键字属性,请使用带有#(磅)的Expression attribute Name参数来表示占位符。

类似地,在要为值属性使用占位符的地方,使用表达式属性值参数和:(冒号)来表示占位符。

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

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) {....});

:status是表达式中的占位符,您没有为其提供值。在这里查看您是如何为其他占位符提供价值的:

expressionAttr[":delivered"] = "delivered";
expressionAttr[":bad"] = "bad";
expressionAttr[":void"] = "void"

您需要对:status占位符执行同样的操作。我在错误消息中没有看到任何关于保留字的内容,所以我不确定你为什么认为这是错误的原因。该错误特别指出您没有为:status占位符提供值。