【发布时间】:2016-10-15 17:27:52
【问题描述】:
我想扫描 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 个错误:
- InvalidParameterType:预期 params.ExpressionAttributeValues[':lower'] 是一个结构
- InvalidParameterType:预期 params.ExpressionAttributeValues[':higher'].N 为字符串]
我尝试了两种不同的方法(如您在代码中所见:)
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:
解决了。只是将 record.price 更改为 record.price.N
【问题讨论】:
-
您用于
:higher的语法是正确的。您收到的错误消息表明price在您的表中存储为字符串,而不是您期望的数字。可以分享一下你的表结构吗? -
@chukkwagon 语法实际上不正确,并且该值未存储为字符串。您将值作为字符串传递,并使用“N”指定类型,向 DynamoDB 指示它是一个数字。
-
@MarkB - 啊,你是对的,错过了他没有在原始帖子中的 13 周围加上引号。
标签: node.js amazon-web-services lambda amazon-dynamodb