Sal*_*med 13 javascript amazon-web-services node.js 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) { ...........}
Run Code Online (Sandbox Code Playgroud)
运行时出错:
{ [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 }
Run Code Online (Sandbox Code Playgroud)
现在我明白我试图在filterExpression中使用保留关键字,这是非法的.但是,如果我通过aws gui运行相同的功能,它会很好地返回数据(查看图像以获取详细信息): 通过gui扫描状态
所以问题是如何通过节点添加过滤器表达式而不必更改密钥名称???
Sal*_*med 38
解决了 :
aws-sdk采用了两个参数:
表达式属性名称
表达式属性值
两者都提供替换属性列表中使用的占位符的功能.这里的属性有点含糊不清,让我感到困惑.aws上的向导在使用term属性时表示键和值.
因此,在一个情况下,你要使用保留关键字作为一个关键属性使用表达式属性以#(磅)名称参数表示的占位符.
类似地,如果要为value属性使用占位符,请使用Expression Attribute Value参数:(冒号)表示占位符.
所以最后我的代码(工作)看起来像这样:
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) {....});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18552 次 |
最近记录: |