我的扫描功能:
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(参数,函数(错误,数据){…});