我想扫描DynamoDB以获取价格在9到13之间的记录。我的代码:
ar AWS = require('aws-sdk');
var db = new AWS.DynamoDB();
exports.handler = function(event, context) {
var params = {
TableName: "StreamsLambdaTable",
ProjectionExpression: "price", //specifies the attributes you want in the scan result.
FilterExpression: "price between :lower and :higher",
// ExpressionAttributeNames: {
// "#yr": "year",
// },
ExpressionAttributeValues: {
":lower": 9,
":higher": {"N": 13}
}
};
db.scan(params, function(err, data) {
if (err) {
console.log(err); // an error occurred
}
else {
console.log(data.Item.name.S); // successful response
context.done(null,{"Result": "Operation succeeded."});
//res.send(data.name);
}
// return next();
});
};
但我有2个错误:
我尝试了两种不同的方法(正如你在代码中看到的那样):
ExpressionAttributeValues: {
":lower": 9,
":higher": {"N": 13}
}
但它们都不起作用。
编辑:
我还有另外一个问题。我想得到所有这些价格。我尝试使用该代码:
data.Items.forEach(function(record) {
console.log(
record.price + " dadada");
});
但我明白了:
2016-06-14T20:33:23.915Z 3ce248c7-326f-11e6-855c-57839aedb817 [object Object] dadada
2016-06-14T20:33:23.915Z 3ce248c7-326f-11e6-855c-57839aedb817 [object Object] dadada
编辑2:
Soolved。刚刚将record.price更改为record.price.N
答案 0 :(得分:2)
错误消息告诉您到底出了什么问题。它希望":lower
“成为一个结构,就像你提供给":higher"
一样,它希望":higher"
的值是一个字符串。就像这样:
ExpressionAttributeValues: {
":lower": {"N": "9"},
":higher": {"N": "13"}
}