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

我的扫描功能:

var tableName='faasos_orders',
filterExp='状态=:已交付或状态=:无效或状态=:错误',
projectionValues='',
表达式attr={};
expressionAttr[“:delivered”]=“delivered”;
expressionAttr[“:bad”]=“bad”;
expressionAttr[“:void”]=“void”;
限值=10;
dynamoConnector.getItemUsingScan(tableName,filterExp,projectionValues,expressionAttr,函数(err,data){………..}

运行时出错:

{[ValidationException:无效筛选器表达式:属性名称是保留关键字;保留关键字:状态]
消息:“无效筛选器表达式:属性名称是保留关键字;保留关键字:状态”,
代码:“ValidationException”,
时间:2016年4月18日星期一21:57:30 GMT+0530(IST),
requestId:'AV6QFHM7SPQT1QR3D4OO81ED4FV4KQNSO5AEMVJF66Q9ASUAJG',
状态代码:400,
可检索:错误,
retryDelay:0}

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

所以问题是如何通过节点添加过滤器表达式而不必更改键名

已解决:

aws sdk采用两个参数:

表达式属性名

表达式属性值

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

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

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

最后,我的代码(工作)如下所示:

变量参数={
表名:“faasos订单”;,
过滤器表达式:“订单”状态=:已交付或“订单”状态=:无效或“订单”状态=:错误”;,
表达式属性值:{
&“已交付”:已交付:;,
&“无效”:“无效”;,
&坏的:坏的;
},
表达式属性名称:{
&“订单”状态:“状态”;
}
};  
dynamodb.scan(参数,函数(错误,数据){…});

发表评论