Abd*_*naf 4 amazon-web-services node.js amazon-dynamodb aws-sdk
我使用amazon dynamoDb来存储我的数据.我创建了这样的数据库
分区键:userid,Type:String
排序键:得分,类型:数字
我插入了一些行.
manaf1 | 100
manaf2 | 500
manaf1 | 200
manaf1 | 600
我需要获得所选用户的最高和最低分数.这是我的代码
var AWS = require("aws-sdk");
AWS.config.update({
region: "myRegion"
});
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
"TableName": "tableName",
"KeyConditionExpression": "#userid = :userid ",
"ExpressionAttributeNames": {
"#userid": "userid"
},
"ExpressionAttributeValues": {
":userid": {
"S": "manaf1"
}
}
};
docClient.query(params, function (err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
}
});
Run Code Online (Sandbox Code Playgroud)
但是在运行此代码时出现错误.
Unable to query. Error: {
"message": "One or more parameter values were invalid: Condition parameter type does not match schema type",
"code": "ValidationException",
"time": "2016-08-31T06:12:13.825Z",
"requestId": "S1DFFJNDNVV4KQNSO5AEDASFMVJF66Q9ASHDFUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 0
}
Run Code Online (Sandbox Code Playgroud)
我需要输出像
manaf1最低分= 100
manaf1最高分= 600
请更改ExpressionAttributeValues,如下所述.这应该可以解决错误.
ExpressionAttributeValues : {
':userid' : 'manaf1'
}
Run Code Online (Sandbox Code Playgroud)
要按降序对分数进行排序,可以将ScanIndexForward设置为false.
var params = {
TableName : table,
KeyConditionExpression : 'userid = :userid',
ExpressionAttributeValues : {
':userid' : 'manaf1'
},
ScanIndexForward: false
};
Run Code Online (Sandbox Code Playgroud)
如果ScanIndexForward为true,DynamoDB将按照存储顺序返回结果(按排序键值).这是默认行为.如果ScanIndexForward为false,则DynamoDB按排序键值以相反顺序读取结果,然后将结果返回给客户端.
类型:布尔值
要按升序对分数进行排序,可以将ScanIndexForward设置为true.
使用ScanIndexForward,您可以将MIN和MAX得分记录作为结果中的第一条记录.
| 归档时间: |
|
| 查看次数: |
4715 次 |
| 最近记录: |